为什么内核不清除进程中第二个malloc分配的内存?

问题描述 投票:0回答:1

遵循以下两个问题:

  1. Kernel zeroes memory?

  2. If the heap is zero-initialized for security then why is the stack merely uninitialized?

#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。但是重新使用malloc在第一个分配的内存free之后分配新的内存,新的内存与第一个内存具有相同的虚拟地址和相同的内容。

我的问题:内核如何知道该内存首先分配给一个进程,并且需要将其设置为零?

并且内核如何知道将内存重新分配给相同的进程并且不需要清除?

c linux memory-management memory-leaks
1个回答
1
投票

从操作系统中为您的内存池获取一块内存并重新使用内存池中已经存在的内存是两件事。

© www.soinside.com 2019 - 2024. All rights reserved.