根据手册,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
吗?是吗?
答案 0 :(得分:0)
因此,应该使用
GC_MALLOC_ATOMIC
来代替malloc
,而应该使用GC_MALLOC
来代替calloc
吗?是吗?
否。
您是正确的,GC_MALLOC_ATOMIC()
就像malloc()
,因为malloc()
不保证清除分配的空间,而GC_MALLOC()
就像calloc()
它确实会清除已分配的空间,但是在最一般的意义上,您应该将{em> {em> {em}和malloc()
都替换为calloc()
。这是因为,
GC_MALLOC()
记录了此约束:
客户端保证生成的对象将永远不包含任何指针。
另一方面,通常对一个人正在分配的空间的使用情况有一些了解,而当一个人这样做时,GC_MALLOC_ATOMIC()
对于不包含指针的对象将是首选。这是因为GC不会(永远)花费时间扫描生成的对象以获取指针。如果您希望结果为零填充,请随后手动进行。 GC_MALLOC_ATOMIC()
是执行此操作的常用方法。