当您在unix系统上调用malloc()时会发生什么情况
malloc()库函数在内部调用brk()或sbrk()系统调用,它为数据区域分配内存,所以本地静态变量和全局变量将从堆中分配内存,增加数据区的有效大小。现在我的问题是当我将内存分配给int * a(这是局部变量)时究竟发生了什么。 我可能有误解,请告诉我,如果有的话
int *p
本身是一个局部变量,它是一个指针(现在通常是四个或八个字节,通常在堆栈或寄存器中)。 当您执行p = malloc(...)
,您正在分配内存(在堆上 - 或者即使堆不是用于管理空闲内存的结构,通常称为“堆”的这些日子),并分配一个指针到那个记忆到p
。
当你调用malloc()
你可以访问请求的内存量,或者返回NULL。 这就是保证。 其他一切都依赖于实现。 您访问该内存的机制可能非常多样化。