标签 Blogger 下的文章

地热维修小记

东北地区早已进入寒冬,前些阶段外面的温度已经降到了零下22度,而我家里的温度也从+25度降到了+20度了。以前在屋里可以只穿睡衣睡裤,现在不行了,套上一套毛衣毛裤后,如果在沙发上坐的时间长了也会感觉有些凉嗖嗖的。每天上下班都摸一下地热的进出水管,进水管很热,出水管一直没感觉,真希望有一天出水管也能热起来,但是这一天还是没有到来。终于下定决心要把地热搞定,遂电话到物业处预约维修,由于维修的预约较多,我被排到了今天。

今年8月搬入新房子,今冬也是第一次采暖,没什么经验,也不知道地热不热该如何处理。为了保证维修师傅今天能到我家来,我早上9点半就到物业办公室等维修师傅,据物业工作人员说:地热公司的维修师傅每天都是在9:30到物业办公室取单子,然后再干活儿。我提前10分钟就到了办公室。在和物业人员的攀谈中得知,一般新取暖的住户家中的地热设施要做一下过滤网清洁。我家第一年供暖,过滤网肯定没有清洁,心里嘀咕着"难道是这个原因"?过滤网冲洗物业就能做,如果真是这个问题,那就不用等地热公司的师傅了,为了图快,遂让物业下了单子,做一次过滤网冲洗。在家里左等右等,11点左右,物业的师傅背着工具箱上来了。他打开屋外的维修箱,关闭进水阀门,拧开过滤器,居然没有发现过滤网(工程质量太差);又进入屋内,同样打开屋内的过滤器,发现了一个小的过滤网,网上有一些垢,但还不至于堵了进水,当时就动摇了,肯定不是这个原因,但是物业师傅能力有限,他只能做这个。事后,再给物业电话,想让地热公司的师傅来看一下,物业让我下午等消息。下午物业通知我说,已经下了单子,但是不能保证地热公司的师傅一定来。

除了等,别无他选。一直等到下午3点半,地热师傅也不见踪影。自己动手,风衣足食吧。在网上搜索"地热不热"、"进水管热,出水管不热"等关键字,查到很多资料,但是说法各异。我决定自己先按照网上的一些方法试试给地热管放气,之前公司的几个同事也建议这么做,只是当时不会做,也不想麻烦。现在在网上查到了一篇"地热放气指南"的资料,图文并茂,再加上手头上有以前装修遗留的一根管子,我决定自己弄一弄。按照资料中所说的方式很顺利,开始放气,不到5分钟,就放出一盆水,不过水很清澈,但就是不热。这时门铃响了,地热师傅到了。

地热师傅的解决方法很简单,就是利用已有供暖压力逐一冲洗一下地热管,工具也很简单,一个扳手,一个弯头,载加上一个足够长以至于可以将水引到卫生间马桶中的管子。眼见着从管子里排出的水都是黑黑的,心想这回问题应该可以解决掉了。不到15分钟,管子就冲完了,谢过并送走地热师傅后,心里很是舒服,这一天算是没有白白浪费掉,就等着温度回升吧。希望屋内温度能恢复到25度以上,继续等待中^_^。

常量类型的识别-一个小例子

今天闲时写了一个Demo测试程序,目的:测试64位编译下使用mmap映射共享内存的能力。程序很简单,大致如下结构:
#define MAP_SPACE_SIZE  (4*1024*1024*1024)
unsigned long int ms_sz = MAP_SPACE_SIZE;
…. ….
ptr = mmap( NULL, ms_sz, PROT_READ|PROT_WRITE,MAP_SHARED, fd, 0 );

我尝试在64位编译模式下映射4G的空间,结果mmap返回MAP_FAILED,errno返回EINVAL,通过查看mmap的manual得知,很可能是ms_sz这个参数的问题,当该参数实际值为0或<0时,mmap如是返回错误。输出一下ms_sz,居然真的是零,让我有些不解,但细致想了以后,觉得还是有道理的。

我遂尝试了重新定义MAP_SPACE_SIZE,结果印证了我的分析是正确的。
当#define MAP_SPACE_SIZE  (4*1024*1024*1024L)时,ms_sz输出 4294967296;
当#define MAP_SPACE_SIZE  4294967296时,ms_sz同样输出 4294967296;

这里简单说一下,首先 (4*1024*1024*1024)是不是常量呢?从程序的输出结果来看,编译器没有直接将其与数值常量4294967296等价,而是执行了计算过程。这也是我们第一次得到0这个结果的原因了。由于没有显式的后缀,编译器按照int, long, long long的顺序识别数值类型,编译器在识别4*1024*1024*1024中的各个数值时,显然将各个值识别为int了,而乘积的结果也放到了一个int临时存储区中,4G对于一个32bit的int刚好过庞大,结果溢出,导致该值变成了0,将0赋给ms_sz(unsigned long int),同样也是0,这就是原因。

当#define MAP_SPACE_SIZE  (4*1024*1024*1024L)时,由于显式给出了L后缀,编译器将运算结果直接存储在8 byte的long中,这样ms_sz自然很easy的得到了正确的值 4294967296。

当#define MAP_SPACE_SIZE  4294967296时,这时4294967296可是一个常量,标准的整型常量,编译器发现unsigned int无法将其装下,遂将之识别为long int类型了,这样该值赋给ms_size时就是同类型的了。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言精进之路1 Go语言精进之路2 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com

欢迎使用邮件订阅我的博客

输入邮箱订阅本站,只要有新文章发布,就会第一时间发送邮件通知你哦!

这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats