gpt4 book ai didi

c++ - malloc 是如何理解对齐的?

转载 作者:IT老高 更新时间:2023-10-28 13:58:16 29 4
gpt4 key购买 nike

以下摘自 here

pw = (widget *)malloc(sizeof(widget));

allocates raw storage. Indeed, the malloc call allocates storage that's big enough and suitably aligned to hold an object of type widget

另见 fast pImpl来自草本萨特,他说:

Alignment. Any memory Alignment. Any memory that's allocated dynamically via new or malloc is guaranteed to be properly aligned for objects of any type, but buffers that are not allocated dynamically have no such guarantee

我很好奇,malloc怎么知道自定义类型的对齐方式?

最佳答案

对齐要求是递归的:任何 struct 的对齐只是其任何成员的最大对齐,这是递归理解的。

例如,假设每个基本类型的对齐方式等于它的大小(这通常并不总是正确的),struct X { int;字符;双倍的; } 具有 double 的对齐方式,它会被填充为 double 大小的倍数(例如 4 (int), 1 (char), 3 (padding), 8 (双倍的))。 struct Y { int; X;漂浮; }X的对齐方式,最大等于double的对齐方式,Y相应布局: 4 (int), 4 (padding), 16 (X), 4 (float), 4 (padding)。

(所有数字都只是示例,在您的机器上可能会有所不同。)

因此,通过将其分解为基本类型,我们只需要知道少数基本对齐方式,其中有一个众所周知的最大对齐方式。 C++ 甚至定义了一个类型 max_align_t,其对齐方式最大的对齐方式。

所有 malloc() 需要做的就是选择一个该值的倍数的地址。

关于c++ - malloc 是如何理解对齐的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8752546/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com