【发布时间】:2020-04-20 06:22:27
【问题描述】:
请遵循以下两个问题:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
const size_t n = 4;
const size_t m = 0x10;
int main()
{
int *p = malloc(m*sizeof(int));
printf("%p ", p);
for (size_t i = 0; i < m; ++i) {
printf("%d", p[i]);
}
printf("\n");
memset(p,9,m*sizeof(int));
free(p);
int *v = malloc(m*sizeof(int));
printf("%p ", v);
for (size_t j = 0; j < m; ++j) {
printf("%x", v[j]);
}
printf("\n");
return 0;
}
输出:
0xaaaae7082260 0000000000000000
0xaaaae7082260 0090909099090909909090990909099090909909090990909099090909909090990909099090909909090990909099090909
我有一个问题:在一个进程中,malloc 分配的内存在第一次使用malloc 时设置为0。但是在free第一个分配的内存之后重用malloc分配一个新的内存,新的内存和第一个内存具有相同的虚拟地址和相同的内容。
我的问题:内核如何知道内存首先分配给进程并且需要设置为零?
以及内核如何知道内存被重新分配给同一个进程并且不需要被清除?
【问题讨论】:
标签: c linux memory-management memory-leaks