为什么malloc(0)在"Inside the C++ Object Model?"中有用?

use*_*470 8 c++ memory malloc

在"内部C++对象模型"一书的第6.3节中,临时对象(第230页):

实际结果取决于实现依赖于底层删除操作符实际释放所寻址的内存的积极程度.某些实现虽然将内存标记为空闲,但实际上并未以任何方式对其进行更改.在内存被其他内容声明之前,可以使用它,就像它没有被删除一样.虽然显然不是软件工程的示例性方法,但是在释放它之后访问内存的这种习惯并不罕见. 事实上,许多实现malloc()提供了一种特殊的调用malloc(0);来保证这种行为.

根据以上所述,malloc(0)似乎与访问已经被释放的存储器(但其内容未被改变)有关.

我的问题是如何malloc(0)保证这种行为?

Die*_*ühl 1

从引用来看,似乎有一些实现用作malloc()某种malloc(0)开关,以指示将来malloc()分配内存的调用方式free()(并且可能realloc(p, 0))在将分配内存标记为未使用时不会更改分配内存的内容。显然,这是一个符合标准的扩展,您最好不要依赖它。