gpt4 book ai didi

c++ - 在C++中,一个线程中的new是否可以分配另一个线程删除的内存?

转载 作者:可可西里 更新时间:2023-11-01 16:19:02 27 4
gpt4 key购买 nike

In glibc, malloc is implemented with arenas .因此,例如,有可能首先由 malloc 分配的内存及以后 free线程 A 中的 d 不能被另一个调用 malloc 使用在线程B中,由于线程A和B可能在不同的arenas,不同的arenas维护着不同的heaps和free lists of memory。

谈到 C++(可能还有 C++11,因为 C++11 有一个新标准),故事还是一样吗?

或者不同的线程实际上共享同一个堆段和内存空闲链表,并且new在一个线程中可以先分配内存new编及以后delete由另一个线程 d?

如果答案取决于实现,那么问题是它们在主要的 C++ 编译器(例如 g++、MVC++、icc)中是如何实现的?

编辑

我认为这个问题是有效的,因为有时你会发布很多线程,并且在每个线程中,您为大量对象动态分配/取消分配大块内存,并且您不希望应用程序的内存使用量高得离谱。

最佳答案

这个:

different threads actually share the same segment of heap and free list of memory, and new in one thread can allocate the memory first newed and later deleted by another thread

线程的目的 - 共享内存空间。如果不需要此功能,最好使用流程。

关于c++ - 在C++中,一个线程中的new是否可以分配另一个线程删除的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225837/

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