我想在運行我的程序的同時獲取linux top命令中的內存字段的一般概念。它是一個簡單的c程序,在分配內存和釋放內存之後,在動態分配內存之前,使用其進程ID在批處理模式下打印我的程序的最高結果。這裏是頂部命令我使用在外殼:我使用下面的函數創建一個二維數組動態如何理解一個進程的Linux最高命令結果?
int** Create2DArray(unsigned int size, int** addr_of_ptr_to_ints_array){
int** int_ptrs_array = (int**)malloc(size * sizeof(int*));
*addr_of_ptr_to_ints_array = (int*)malloc(size * size * sizeof(int));
for (int i = 0; i < size; i++) {
int_ptrs_array[i] = *addr_of_ptr_to_ints_array + (i * size);
}
return int_ptrs_array;
}
作爲
int* int_array1;
int** int_ptr_array1 = Create2DArray(n, &int_array1);
,其中n = 64,因此陣列
top -p my_pid -b -n 1
大小爲(4096 * size(int)= 16kb)+ 64 * size(int *)= 16.25kb並使用以下代碼釋放內存。
free(int_array1);free(int_ptr_array1);
輸出我從上面命令之前獲取,分配後和釋放內存後以下內容:
EDIT:
Pagesize: 4096
--- Before Array Allocation.
top - 17:45:01 up 17:39, 3 users, load average: 0.36, 0.26, 0.34
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.4 us, 2.5 sy, 0.0 ni, 81.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2065072 total, 1675324 used, 389748 free, 48344 buffers
KiB Swap: 1046524 total, 25168 used, 1021356 free, 485028 cached
PID VIRT RES SHR %CPU %MEM SWAP CODE DATA COMMAND
14606 10756 616 524 0.0 0.0 0 8 8508 mx
--- Array Allocated.
top - 17:45:03 up 17:39, 3 users, load average: 0.36, 0.26, 0.34
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.4 us, 2.5 sy, 0.0 ni, 81.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2065072 total, 1675364 used, 389708 free, 48344 buffers
KiB Swap: 1046524 total, 25168 used, 1021356 free, 485028 cached
PID VIRT RES SHR %CPU %MEM SWAP CODE DATA COMMAND
14606 11780 616 524 0.0 0.0 0 8 9532 mx
--- Array Updated.
top - 17:45:06 up 17:39, 3 users, load average: 0.49, 0.29, 0.35
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.4 us, 2.5 sy, 0.0 ni, 81.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem: 2065072 total, 1675348 used, 389724 free, 48344 buffers
KiB Swap: 1046524 total, 25168 used, 1021356 free, 485028 cached
PID VIRT RES SHR %CPU %MEM SWAP CODE DATA COMMAND
14606 11784 616 524 0.0 0.0 0 8 9536 mx
問題:
Q1。爲什麼RES在數組分配之前和之後都是常量? Q2302。爲什麼在陣列被釋放後VIRT增加了?
Q3。雖然匿名內存應該代表由malloc命令根據此article創建的內存,但是(RES-SHR)*(頁面大小)=(616-524)* 4096 = 376.832Kb,我期待匿名內存在16.5kb之後。
任何幫助表示讚賞。 謝謝
感謝您的回覆。我編輯了我的答案,在將所有數組元素更新爲常量值後包含「頂部」結果。儘管如此,我仍然沒有在內存領域看到任何改變。我想知道的是當我們分配,更新和釋放動態內存時,哪些字段會受到影響? – shaffooo 2014-11-23 22:51:55