我正在观看Jonathan Blow的视频关于一种新的游戏编程语言的想法,其中他讨论了游戏编程中的常见模式,称之为“联合分配”。这个想法是当你有一个类有几个成员是动态分配数组(可以是
std::vector
但由于它们是固定大小,更像是建议的std::dynarray
),你预先分配足够存储所有数组数据的内存,并执行仅足够所有数组的一个大分配,而不是每个数组都进行一次分配。
他提出直接语言支持这种模式,这让我想知道C++标准是否允许实现以这种方式合并分配?我认为这需要编译器付出一些英勇的努力来实际实现优化,但我没有看到明显的理由为什么原则上不能这样做。有人知道这在标准下不被允许吗,甚至是否已经有实现在实践中执行此优化?
dynarray
分配给另一个,或者做任何傻事,比如给一个类成员std::dynarray<int> m_dynarray;
,m_dynarray.~dynarray(); new (&m_dynarray) std::dynarray<int>(100000);
,我IRC展示了定义行为。这里有很多复杂的陷阱。 - cdhowie