C位置新

C位置新,第1张

概述对不起,如果这个问题听起来很愚蠢,但我刚刚开始学习C并且有些事让我感到困惑 我一直在阅读C Primer(我发现这是一本非常好的学习C的书),并且在放置新部分中给出了一个例子.该示例使用char数组为placement new提供内存空间 const int BUF = 512;const int N = 5;char buffer[BUF];double * pd1;pd1 = new 对不起,如果这个问题听起来很愚蠢,但我刚刚开始学习C并且有些事让我感到困惑

我一直在阅读C Primer(我发现这是一本非常好的学习C的书),并且在放置新部分中给出了一个例子.该示例使用char数组为placement new提供内存空间

const int BUF = 512;const int N = 5;char buffer[BUF];double * pd1;pd1 = new (buffer) double[N];

我的问题是为什么使用char数组为新的贴图提供内存空间?上面代码中的最后一行是为double数组分配内存,当原始内存空间包含char数组时,这怎么可能?如果placement new正在使用char数组的内存空间,这是否意味着当我们分配double数组时它会覆盖该内存中的char数组?

如果问题很奇怪,再次对不起,但希望我已经说清楚了.

解决方法

why is it using a char array to provIDe memory space for the placement new?

为什么不? char是C定义的最小类型,几乎在每个实现中,它的大小都是一个字节.因此,当您需要分配特定大小的内存块时,它是一个很好的类型.

C还有关于char数组(以及只有char的分配)的非常具体的机制.例如,新的char [*]将不会与char的对齐对齐.它将与任何类型的最大正常对齐对齐因此,您可以使用它来分配内存,然后将任何类型构造到该内存中.

Also the last line in the code above is allocating memory for an array of double,how is that possible when the original memory space contains a char array?

它没有分配任何东西.它正在构建一个数组,使用你给它的内存.这就是放置新的行为,它在所提供的内存中构造一个对象.

If the placement new is using the memory space of the char array,does this mean when we allocate the double array it overwrites the char array in that memory?

是.

总结

以上是内存溢出为你收集整理的C位置新全部内容,希望文章能够帮你解决C位置新所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存