gpt4 book ai didi

c++ - new/delete/free store 和 malloc/free/heap 组合

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:53 32 4
gpt4 key购买 nike

new/delete 关键字使用免费商店

malloc/free 关键字是使用堆

我看到某处写着new 使用malloc。怎么会这样?它们不在内存段中使用?

其次,我看到某处写道我们不能在new 之后使用free 或在malloc 之后使用delete >。但是如果 new 使用 malloc 为什么 free 不起作用?

以及我们在 new 等之后使用 free 的地方。这是错误还是未定义的行为?

谢谢

最佳答案

new/delete keywords are use the free store
malloc/free keywords are use the heap
i see written somewhere that new use malloc. how could it be? they are not use in the memory segment?

C++ 中的“自由存储”是一个描述动态存储持续时间对象所在位置的术语。术语“堆”是同一事物 的俗语。 new 可以使用 malloc,这很好。

但是,它也做其他事情,例如调用构造函数,并且有可能使用其他一些内存管理系统(例如内存池)代替 malloc

是的,freenew 分配的对象是未定义的,主要是因为 free 不调用类析构函数。类似地,对于 deleteing 你用 malloc 创建的东西:这样做会混合两种不同的分配/构造习惯用法,虽然你可以让它工作,但它会非常壮观很难做到这一点。

why this memory segment have two names?

因为“堆”(甚至不是“内存段”)可能不是堆,所以这是一个愚蠢的术语。 C++ 试图通过引入抽象“自由存储”来逐步淘汰它。不幸的是,人们一直说“堆”是因为 (a) 遗留问题,(b) 山寨 bikeshedding,(c) 对抽象的目的/意义/值(value)的无知,以及 (d) 不良的教育/指导。

关于c++ - new/delete/free store 和 malloc/free/heap 组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22810427/

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