2000-10-19
|
字节对齐的目的在于提高CPU的处理性能,MSDN有说, A misaligned 4-byte data member, which is on an address that is not a multiple of four, causes a performance penalty with an 80386 processor and a hardware exception with a MIPS® RISC processor. In the latter case, although the system handles the exception, the performance penalty is significantly greater. 注意到所谓的"performance penalty",简单的理解是,处理器在存取内存时,对不同的内存起始地址会有不同的存取效率,比如对偶地址存取一个字只需要一个时钟周期,而对于奇地址则需要两个时钟周期。因此,对于 C 这种与物理系统关系紧密的语言,编译器就需要考虑在内存中的地址对齐问题,以提高处理效率。比如如下的代码 void fun() { char c; int i; c = 1; i = 1; } 编译器在将其翻译成机器码时就会使用字节对齐,上述代码的赋值语句在VC中的编译结果如下(未优化) 00401028 mov byte ptr [ebp-4],1 0040102C mov dword ptr [ebp-8],1 其中 ebp 为当前函数栈的基地址指针,从中可以看到 c 和 i 在内存中都占据了4字节(尽管sizeof( c ) 为 1)。
关于在结构中的字节对齐问题,我正在考察,或许能再发表些议论。
以上只是我的个人见解,欢迎批评指正。
【在 cyber (小小蓝牙) 的大作中提到:】 modico,也许是我对字节对齐这个术语理解错了, 但现在有一...
|