问题描述
- double类型结构体对齐的疑惑
-
32bit的cpu,在msvc中如果结构体有double类型,则以8字节对齐,例如
struct test
{
char ch;
double j;
};
ch也会占用8个字节,而32bit的cpu会一次性取到8个字节么?难道不是32bit,4个字节?
为什么要以8个字节来对齐呢?谢谢
解决方案
如果编译器为sse优化,那么是按照128bit,也就是8字节对齐的,如果编译器为sse2优化,那么是按照16字节对齐的。
http://www.xuebuyuan.com/652857.html
解决方案二:
struct会进行对齐时为了提高效率,便于cpu操作。如果32bit的cpu一次最多只能取32bit的数据,那么
只要double的首位跟4Byte对齐,都是分2个指令取出来,根本不需要非得8byte的差,所以为什么不将ch之后只填充3个byte,然后直接是double呢
解决方案三:
32bit只是说明对齐格式,但是double占用了8个字节。为了跟它对齐,会填充到8个字节。
时间: 2024-11-01 15:02:20