以下节选自here页
pw = (widget *)malloc(sizeof(widget));
分配原始存储.实际上,malloc调用分配存储 够大了,而且是suitably aligned to hold an object型的 小组件
还有赫伯·萨特的fast pImpl篇,他说:
Alignment.任何内存对齐.任何分配的内存
我很好奇,malloc如何知道自定义类型的对齐方式?
以下节选自here页
pw = (widget *)malloc(sizeof(widget));
分配原始存储.实际上,malloc调用分配存储 够大了,而且是suitably aligned to hold an object型的 小组件
还有赫伯·萨特的fast pImpl篇,他说:
Alignment.任何内存对齐.任何分配的内存
我很好奇,malloc如何知道自定义类型的对齐方式?
对齐要求是递归的:任何struct
的对齐只是其任何成员的最大对齐,这是递归理解的.
例如,假设每个基本类型的对齐等于其大小(通常不总是如此),则struct X { int; char; double; }
具有double
的对齐,并且它将被填充为双精度大小的倍数(例如,4(整型)、1(字符)、3(填充)、8(双精度)).struct Y { int; X; float; }
具有X
的对齐,这是最大的并且等于double
的对齐,并且Y
相应地被布局:4(整型)、4(填充)、16(X)、4(浮动)、4(填充).
(所有数字都只是示例,在您的机器上可能会有所不同.)
因此,通过将其分解为基本类型,我们只需要知道几个基本路由,其中有一个众所周知的最大路由.C++甚至定义了一个max_align_t
的对齐方式is最大对齐方式.
所有malloc()
需要做的就是 Select 一个该值的倍数的地址.