字节填充与对齐

1、如该结构体: struct foo { int i ; char c[2] ; short s ; } 现在假设int是32位,char是8位,short是16位,sizeof(foo)将会是多少呢?直观上认为是4+2+2为8字节,可是在许多体系结构上,访问自然对齐的数据元素的速度则比较快,因此,编译器将会按照最佳对齐情况的需要填充字节。如果是4字节对齐,则sizeof(foo)将等于12. microsoft visual c++有提供#pragma pack来指定对齐方式 如:#pragma pack(8)
Portable | 2010-02-25 22:51 | 阅读 814 次 | 评论 0 条

char类型的可移植性问题

1、ANSI C 标准没有规定char类型在默认情况下是有符号的还是无符号的,因此,由于隐式升级规则,将可能导致极端混乱的行为,如: char c ; c = 0xFF ; if( c == 0xFF) { //相关代码,此处是否执行将会取决于你的编译器 } 如果编译器将char类型当做有符号类型的话,将不会执行大括号里面的代码,由于隐式升级规则,char将升级为int型,也就是说,转换后,c的值为0xFFFFFFFF,和0xFF比较的话,当然是不等的。 如果是无符号的话,那将会测试成功。又如: char c ; while( (c = getcha...
Portable | 2010-02-25 22:42 | 阅读 753 次 | 评论 0 条

位屏蔽的可移植性

1、不要认为数字常量在所有平台上的表示都是相同的,例如,-1和0xFFFFFFFF是一样的,可并不总是如此,只有在32位系统上才是等价的,在64位系统上表示的是很大很大的正数。 2、位屏蔽,如想屏蔽低四位: (1)nonportable code unsigned long x = some_vaue ; x &= 0xFFFFFFF0 ; // this code is absolutely wrong on 64 bits platform ; (2)portable code unsigned long x = some_value ; x &amp...
Portable | 2010-02-25 22:10 | 阅读 771 次 | 评论 0 条

学到老,活到老

相信很多人都看过爱情公寓了,和老友记差不多。我特别喜欢关谷君说的一句话:学到老,活到老。很多朋友看了可能心里就想:扯淡,明明就是活到老,学到老。没错,中国的古话确实是这样的,不过我想想,关谷君说的也不是没有道理啊,想活到老,就必须学到老,我喜欢这样解释,因为我喜欢不断的学习来提升我自己。 受到这句话的启发,我决定,开通了这个专用技术空间,以记录我一生所学的一切的一切,包括技术、哲学、生活感悟等等。 其实我心里一直很抑郁,因为我发现我其实是一个文盲,对文学、历史、艺术、哲学却一知半解,甚至一窍不通,我打从心底里鄙视我自己,我要努力了。 希望...
生活感言 | 2010-02-05 15:58 | 阅读 877 次 | 评论 2 条
文章归档