C- gc_malloc实际上对应于calloc()



根据手册,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?是吗?

因此,应使用GC_MALLOC_ATOMIC替换malloc,并且应使用GC_MALLOC替换calloc?是吗?

no。

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

  1. GC_MALLOC_ATOMIC()记录此约束:

    客户承诺所产生的对象将永远不会包含任何指针。

  2. 确实包含指示器的对象必须在分配时清除,以便GC对其对这些对象的解释充满信心。

另一方面,通常一个人对一个空间的使用有所了解,而当一个人进行分配时,对于不包含指针的对象而言,GC_MALLOC_ATOMIC()是首选的。这是因为GC不会(永远不会)花时间扫描产生的对象以获取指针。如果您希望结果零填充,请在之后手动执行此操作。memset()是这样做的常见手段。

最新更新