0
我必須做一個程序,將int
與mmap()
分配一個數組,然後計算實際分配了多少內存。C計數分配的內存
到目前爲止,我有分配數組的代碼,但我不知道如何計算分配的內存。這是我試過到目前爲止:
處理程序:
int i;
void segfault_sigaction(int signal, siginfo_t *si, void *arg)
{
printf("ujel segafult, velikost pomnilnika je: %d bajtov\n", sizeof(int) * i);
exit(0);
}
主:
int main(int argc, char* argv[])
{
int *addr;
int n = atoi(argv[1]);
struct sigaction sa;
memset(&sa,0,sizeof(sigaction));
sa.sa_handler = segfault_sigaction;
//sigemptyset(&sa.sa_mask);
//sa.sa_sigaction = segfault_sigaction;
//sa.sa_flags = 0;
sigaction(SIGSEGV,&sa, NULL);
addr = mmap(NULL, n * sizeof(int), PROT_WRITE | PROT_READ ,MAP_ANONYMOUS | MAP_PRIVATE,-1,0);
i = n;
while(1){
addr[i+1] = 5;
i++;
}
return 0;
}
編輯:重新閱讀你的答案和任務的描述後,我改變了代碼,我把一個捕獲SEGFAULT的處理程序,但它不是很可靠(有時可行,有時會出現默認的分段錯誤錯誤)。
當然,不使用代碼中出現的'sizeof'。 –
據我可以從任務描述中得知,我必須計算分配給程序的所有內存。它表示應該通過移動數組的最後一個元素來繼續,直到出現SEGFAULT錯誤。 –
@TimPungračič這是不可靠的:可能有一些其他的映射(例如程序代碼)。大多數平臺都提供了一種分析程序內存映射的方法,但是它依賴於操作系統,例如,在Linux上解析'/ proc/self/maps'。 – Gilles