gpt4 book ai didi

c++ - 内存 [取消] 分配成本和潜在的编译器优化 (c++)

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:32:40 24 4
gpt4 key购买 nike

是否明确定义了内存 [de] 分配的成本?如果成本取决于所使用的特定编译器,是否有实现内存 [解除] 分配的通用方法,以便我可以合理地承担成本?

编译器是否能够优化以下代码,使对“new”的调用只执行一次?

char * arr = NULL;
for (size_t i = 0; i < 5000000000; ++i)
{
arr = new char[100000000]
... // Process things here
delete []arr;
}

最佳答案

编译器几乎肯定无法执行此优化。在最低级别,存储分配归结为对库函数的调用,例如 malloc(以及更深一层,对 OS API)的调用。对于编译器来说,假设可以忽略单个 malloc/free 对并重用它们的存储是不安全的,因为它们的实现应该在优化器的范围之外。

除此之外,我认为这对优化器来说不是一件好事。这是你,程序员,不需要特别努力就可以做到的事情。

内存分配/解除分配没有标准化成本。通常,分配/解除分配时间可能会有很大差异(例如,如果强制用户空间堆实现从操作系统内核的内存管理器中获取新页面,则需要更长的时间)。

一个合理的经验法则是小分配很可能比大分配快,分配应该比取消分配慢。

关于c++ - 内存 [取消] 分配成本和潜在的编译器优化 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5625842/

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