malloc问题?

use*_*853 3 c memory malloc

您好我使用malloc()生成这样的缓冲区,其中buffer是char*

buffer = (char*)malloc(chunksize+1);
  for (k = 0; k < chunksize; k++) {
    buffer[k] = (char) (j+k);
  }
Run Code Online (Sandbox Code Playgroud)

但是,在调试器中,我可以看到缓冲区[3]例如是我写的char,但缓冲区缓冲区是空的(很多空格).但是第二次我在free(缓冲区)之后在缓冲区中写东西,它会显示我第一次写的内容,并覆盖它.谁能告诉我为什么?谢谢!!

Ste*_*sop 8

一般来说,malloc实现的工作方式是从操作系统中获取大量内存,然后在请求缓冲区时再分配一小部分内存.这是因为从操作系统获取内存相对较慢.

作为安全措施,您的操作系统将提供malloc空白内存(满0或其他重复值).您不希望一个进程能够读取不相关进程的离开.

但是,malloc没有这样的问题,因为它只能从一个块到一个进程.如果你能看到自己的离开(至少不是来自安全POV)并不重要.

所以发生的事情是你已经使用了一个缓冲区,并且最初看到它是空白的.然后你释放它并要求"另一个"缓冲区,并且malloc恰好再次向你发送了相同的内存,这次包含你留在其中的值.

获得相同内存两次的"巧合"并非不太可能,因为在可能的情况malloc下重新使用最近使用的内存是有充分理由的- 它更可能是在缓存中.

您可能认为这对您无关紧要,因为通常您不会从新分配的内存中读取内容.但这很重要malloc,因为通常malloc会将自己的管家数据保留在缓冲区附近.如果与从缓存中驱逐内存相关的成本也很重要 - 如果你可以被"欺骗"一遍又一遍地重复使用相同的内存,那么这种情况就会发生.