c - 在分配连续内存的 malloc 和 calloc 之间

标签 c malloc calloc

我阅读了很多关于 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/

相关文章:

c - 如何在Linux内核中打开并读取 `struct inode *`处的文件

c - 哪种方式为字符串保留内存?

c - 整页 Malloc

c - 释放结构中的数组

C++ calloc 一个字符串数组

c - 如何从 execl 向 scanf 传递参数?

c - 在C中显示颜色数组

iphone - iPhone SpeakHere 示例中的录音文件位于哪里?

c - 使用未分配的空间 calloc

c - 重新分配三重指针