我阅读了很多关于 malloc 和 calloc 的链接,但我仍然对“在分配连续内存的 malloc 和 calloc 之间”感到有点困惑。
在某些链接中,他们给出了 malloc 将连续内存分配为字节 block 但是在某些链接中,他们给出了 calloc 为元素数组分配的连续内存。
请给我一个明确的想法。
最佳答案
两个调用都分配了连续的内存。
基本上,calloc()
可以被认为是 malloc()
之上的(瘦)包装器:
void * calloc(size_t nmemb, size_t size)
{
const size_t bytes = nmemb * size;
void *p = malloc(bytes);
if(p != NULL)
memset(p, 0, bytes);
return p;
}
关键是它没有任何特殊的神奇作用,它只是像 malloc()
一样分配内存,但恰好 a) 初始化它,并且 b) 有一个接口(interface)使当您要将返回的指针用作数组时,它很容易使用。
请注意,像往常一样在现代计算机上使用 virtual memory ,当然不能保证底层(物理)内存是连续的。但由于所有访问都将通过操作系统映射的虚拟地址进行,所以这无关紧要。
关于c - 在分配连续内存的 malloc 和 calloc 之间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21332449/