gpt4 book ai didi

C malloc() 数组即使在被访问后也不会占用内存

转载 作者:太空宇宙 更新时间:2023-11-04 07:12:43 24 4
gpt4 key购买 nike

我一直遇到一个问题,试图通过 system() 调用使用 linux 工具 top 显示动态分配的数组所用的内存量我的程序。

#include <stdio.h>
#include <stdlib.h>

int main() {
int Array_Length = getpagesize();
int pid = getpid();
char top_call[22];
sprintf(top_call, "top -b -n1 -p %d", pid);

int *Array1 = malloc(Array_Length * sizeof(int));
int *Array2 = malloc(Array_Length * sizeof(int));
system(top_call);

int i;
for(i = 0; i < Array_Length; i++) {
Array1[i] = 1;
Array2[i] = 1;
}
system(top_call);

return 0;
}

第一个 system(top_call) 结果如我所料:

top - 18:30:01 up 5:05, 2 users, load average: 0.00, 0.01, 0.04  
Tasks: 1 total, 0 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.1%sy, 0.0%ni, 99.5%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 249852k total, 236660k used, 13192k free, 66180k buffers
Swap: 407548k total, 128k used, 407420k free, 72952k cached

PID VIRT RES SHR %MEM SWAP CODE DATA
2000 10280 564 464 0.2 9716 8 8512

由于 malloc() 使用 lazy allocation ,在第二个 system(top_call) 之后,我预计内存使用会增加,因为现在已经访问了数组。但是,第二次调用后的结果显示我的进程使用了​​相同数量的内存:

top - 18:41:22 up 5:16, 2 users, load average: 0.00, 0.01, 0.04  
Tasks: 1 total, 0 running, 0 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3%us, 0.1%sy, 0.0%ni, 99.5%id, 0.1%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 249852k total, 236052k used, 13800k free, 66236k buffers
Swap: 407548k total, 128k used, 407420k free, 72948k cached

PID VIRT RES SHR %MEM SWAP CODE DATA
2000 10280 564 464 0.2 9716 8 8512

谁能解释为什么我的阵列没有用完任何内存?

如果格式不是那么好,我们深表歉意。

最佳答案

您似乎假设每次调用 malloc() 都会要求操作系统分配内存。这是不太可能的,尤其是对于小额分配。您应该期望操作系统的分配非常非常少。

关于C malloc() 数组即使在被访问后也不会占用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27096334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com