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