【发布时间】:2017-03-05 17:58:02
【问题描述】:
为什么要对齐 8 个字节(在 64 位系统上是 16 个字节)?这种对齐的原因是什么?
示例:
int* ptr1 = new int;
int* ptr2 = new int;
int* ptr3 = new int;
cout << ptr1 << " " << ptr2 << " " << ptr3 << endl;
cout << ptr2 - ptr1 << endl;
输出:
0x15cbc20 0x15cbc40 0x15cbc60
8
【问题讨论】:
-
实际上,查看您提供的输出,您分配的 int 相隔 32 个字节。
-
完全取决于使用什么内存分配算法。分配的块不太可能与请求的类型大小完全匹配,但至少是对齐的,或者获取与默认分配器一起使用的最小内存块。
-
对齐已完成,因此 CPU 可以更快地从主内存中读取
-
指针的区别不是8个字节,而是8个整数。无论如何,只分配一些大小,如 32、64 或 128 字节可能会提高分配速度并最大限度地减少内存碎片。谁在堆上分配单个整数?
-
您需要一本关于计算机如何工作的书! :D