【发布时间】:2012-11-06 14:50:56
【问题描述】:
问题:如何使用“placement new”来创建动态大小的数组?或者更具体地说,如何从预先分配的内存中为数组元素分配内存。
我正在使用以下代码:
void* void_array = malloc(sizeof(Int));
Int* final_array = new(void_array) Int;
这保证了 final_array*(数组指针)是从 void_array* 保留的位置分配的。但是 final_array 元素呢?我也希望从预先分配的内存中分配它们。
P.S:我不得不说我正在使用一些 API 来控制磁贴架构。有一个功能与 malloc 完全一样,但也有其他功能,例如允许您控制已分配内存的属性。所以,我基本上需要做的是使用类似 malloc 的函数来分配具有我想要的属性的内存(例如,从哪个内存库,在哪里缓存等等)
【问题讨论】:
-
这已经是错误的了。如果您要在某处放置新的
Int,则需要在某处分配sizeof(Int)空间,而不是sizeof(Int*)。另外,查找自定义分配器 +std::vector<>或std::list<>。 -
分配非固定大小是没有意义的。当你分配内存时,你需要告诉分配器你需要多少。
-
@Gorpic:这在我的应用程序中很有意义。我正在使用一个 API,它可以让我对硬件进行一些内存管理(从哪里分配内存对我来说更重要,而不是多少)
-
这就像去旅馆说“我下个月需要房间”。除非我告诉他们我需要多少,否则他们无法保证他们会拥有它们。此外,在这种情况下,我是说“我需要具有相关数字的房间”,因为数组内存块必须是连续的。
-
@Gorpik:我希望我能在这里解释整个模型。但这项研究是关于要求一个内存库分配您需要的内存。如果不能,它会自动将您的请求发送到另一个存储库。但重要的部分是,大多数时候它都有你需要的内存,如果系统已经分离了你的请求流量,那么作为程序员的你。
标签: c++ malloc dynamic-arrays placement-new