0
我想用objectiv-c/c代碼得到堆分配(實況)的大小。我們可以在xCode儀器中看到這些分配。我們如何用代碼獲取這些信息? 我想通過我的應用程序分配HEAP中的當前活動對象大小..?我有常駐記憶集信息,但這不是完全沒有幫助。如何計算objective-c/c中Dynamic Heap Allocations的大小?
我想用objectiv-c/c代碼得到堆分配(實況)的大小。我們可以在xCode儀器中看到這些分配。我們如何用代碼獲取這些信息? 我想通過我的應用程序分配HEAP中的當前活動對象大小..?我有常駐記憶集信息,但這不是完全沒有幫助。如何計算objective-c/c中Dynamic Heap Allocations的大小?
對於Linux,你可以使用來自end
的差異sbrk(0)
以確定您的堆的當前大小:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
extern char etext, edata, end;
int
main(int argc, char *argv[])
{
printf("First address past:\n");
printf(" program text (etext) %10p\n", &etext);
printf(" initialized data (edata) %10p\n", &edata);
printf(" uninitialized data (end) %10p\n", &end);
printf(" Heap Size (sbrk() - end) %10p\n", sbrk(0) - (void *)&end);
exit(EXIT_SUCCESS);
}
這工作,因爲在Linux中堆BSS段後直接開始。
編輯:
如果你正在尋找的駐留集(物理內存目前在我們的過程中使用的量),那麼對於Linux,您需要從/proc/self/stat
閱讀(可惜在getrusage
領域是停產):
FILE *fpstat = fopen("/proc/self/stat", "r");
long int rss;
fscanf(fpstat, "%*d %*s %*c %*d %*d %*d %*d %*d %*u %*u %*u %*u %*u %l*u"
"%l*u %l*d %l*d %*d %*d %*d %*d %*u %l*u %ld", &rss);
rss *= sysconf(_SC_PAGE_SIZE); // to get memory in bytes
對於OS X存在用於此天然馬赫方法:
struct task_basic_info t_info;
mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT;
task_info(MACH_PORT_NULL, TASK_BASIC_INFO, (task_info_t)&t_info, &t_info_count);
size_t rss = t_info.resident_size;
由於爲答案。其實我想讓我的整個應用程序分配大小。我問一些全球性的東西,應用/程序的當前分配大小是多少?有什麼辦法嗎? –
@C_X我很抱歉,但你的問題被錯誤地詢問,有更多的進程內存,然後就是堆。在這種情況下,您正在尋找駐留集而不是堆:對於Linux,請參閱'/ proc/self/stat'中的字段24,並將其乘以'sysconf(_SC_PAGESIZE)'。對於OS X,task_info將直接爲您查詢RSS。 –
感謝您的回覆。不,我不想那樣,我有這些東西,但駐地記憶並沒有給我什麼,我堆分配。實際上居民的記憶遠遠超過你的現場分配。我很抱歉如果我不能讓這更容易解釋。 –