10

背景是我的这个问题。简而言之,我必须 fork在一个多线程 C++ 程序中,所以我想弄清楚当仅限于可重入函数时我能做多少,其中最重要的事情之一是动态内存。

因此,已知malloc不可重入的。但是 C++ 的new呢?我用谷歌搜索了相关结果并不多(主要是由于难以找到正确的“新”),但至少有一个声明new reentrant。还有一个关于整个 C++ 标准库的相关问题没有令人满意的答案。

编辑:我想标准没有说明这一点,所以我最关心的是主要实现。

4

3 回答 3

3

我查看了gcc libsupc++clang libc++源代码,用于替换符合标准的 C++ new/delete 运算符 - 以支持平台上的原生 SIMD 对齐要求,而malloc.

它们基本上是一些 EH 逻辑等的包装器mallocfree我不是语言律师,但除非两者都错了,否则我认为可以安全地得出结论:不,它们不是可重入的。

于 2012-12-30T12:19:18.737 回答
3

标准允许 new只是一个包装器malloc,所以如果malloc不能重入,那么可以new

于 2012-12-30T12:29:41.587 回答
1

线程安全和重入并不完全相同

AFAIK,C++ ISO 标准不保证newdelete运算符的线程安全。但是g++实现确实提供了线程安全(这是它速度慢的原因之一)。

于 2012-12-30T12:19:09.253 回答