情况是这样的,我用的VC6.0开发,假设有下面的代码:
DWORD test[100];
或者是
DWORD *test;
test=(DWORD*)malloc(100);
请问这两个test的起始的地址是不是一定是4的倍数?为什么?谢谢!
两问,第一问10分。第二问30分!

解决方案 »

  1.   

    DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽,
      

  2.   

    数据对齐。
    所位数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍,DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽,x86 CPU能直接访问对齐的数据,当他试图访问一个未对齐的数据时,会在内部进行一系列的调整,这些调整对于程序来说是透明的,但是会降低运行速度,所以编译器在编译程序时会尽量保证数据对齐。