gpt4 book ai didi

c++ - WDK 的 C++ 中数组的 header 大小

转载 作者:行者123 更新时间:2023-11-28 01:48:18 25 4
gpt4 key购买 nike

不确定“标题”是否是正确的术语,如果不正确请纠正我。

我尝试先分配内存,然后使用重载(放置)new[] 运算符来初始化类对象数组(比如 MyClass)。

比如说,MyClass 对象的大小是 0x68,而我想要一个 0x20 的数组。所以总大小是 sizeof(MyClass) * 0x20 = 0xD00,我是这么想的。

现在,当我使用重载放置 new[] 运算符时:

pArr = new(pAllocatedMem)MyClass[0x20];

编译器返回给new[]操作符的size_t实际上是0xD08。多了 8 个字节。查看这 8 个字节的值,它用于存储数组的大小(在本例中为 0x20)。

那么,是否有一个我可以使用的 header 大小的恒定定义,例如来自 WDK 的定义?此大小的变化是否取决于编译器或其他因素?

最佳答案

额外空间的数量(如果有的话)取决于编译器。对于语言定义 [expr.new,第 15 段]:

[It] is a non-negative unspecified value representing array allocation overhead; the result of the new-expression will be offset by this amount from the value returned by operator new[].

运行时通常使用它来了解当最终在数组上调用 delete 时要销毁多少对象。

关于c++ - WDK 的 C++ 中数组的 header 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43991907/

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