0

根据手册,GC_MALLOC清除内存但GC_MALLOC_ATOMIC不清除内存。

void * GC_MALLOC(size_t nbytes)
Allocates and *clears* nbytes of storage.

void * GC_MALLOC_ATOMIC(size_t nbytes)
Allocates nbytes of storage.

https://www.hboehm.info/gc/gcinterface.html

那么GC_MALLOC_ATOMIC应该用来代替malloc还是 GC_MALLOC应该用来代替calloc呢?是这样吗?

4

1 回答 1

1

那么GC_MALLOC_ATOMIC应该用来代替malloc还是GC_MALLOC应该用来代替calloc呢?是这样吗?

不。

您是正确的,GC_MALLOC_ATOMIC()就像不能malloc()保证malloc()清除分配的空间一样,而GC_MALLOC()就像calloc()它确实清除了分配的空间一样,但是从最一般的意义上讲,您应该同时 替换malloc()和。这是因为,calloc()GC_MALLOC()

  1. GC_MALLOC_ATOMIC()记录此约束:

    客户端承诺生成的对象永远不会包含任何指针。

  2. 确实包含指针的对象在分配时必须被清除,以便 GC 在扫描指针时可以确信它对这些对象的解释。

另一方面,人们通常对正在分配的空间的使用有一些了解,并且当了解时GC_MALLOC_ATOMIC(),对于不包含指针的对象来说是首选。这是因为 GC 不会(永远)花时间扫描结果对象的指针。如果您希望结果为零填充,然后手动执行此操作。memset()是执行此操作的常用方法。

于 2019-03-14T21:43:14.253 回答