在unix系统上调用malloc()时会发生什么
malloc()库函数在内部调用brk()或sbrk()系统调用,为数据区域分配内存,因此局部静态变量和全局变量将从堆中分配内存,从而增加数据区域的有效大小。现在我的问题是,当我将内存分配给int*a?这是局部变量时,到底发生了什么。在unix系统上调用malloc()时会发生什么,unix,Unix,malloc()库函数在内部调用brk()或sbrk()系统调用,为数据区域分配内存,因此局部静态变量和全局变量将从堆中分配内存,从而增加数据区域的有效大小。现在我的问题是,当我将内存分配给int*a?这是局部变量时,到底发生了什么。 我可能有误解,如果有,请告诉我。当您调用malloc()访问请求的内存量,或者返回NULL时,谢谢。这就是保证的一切。其他一切都取决于实现。访问该内存的机制可能有很大的不同。int*p本身是一个局部变量,它是一个指针(现在:通常是四个或八个字节,通常在堆栈或寄存器
我可能有误解,如果有,请告诉我。当您调用
malloc()
访问请求的内存量,或者返回NULL时,谢谢。这就是保证的一切。其他一切都取决于实现。访问该内存的机制可能有很大的不同。int*p
本身是一个局部变量,它是一个指针(现在:通常是四个或八个字节,通常在堆栈或寄存器中)。当您执行p=malloc(…)
时,您是在分配内存(在堆上,或者现在通常称为“堆”的东西,即使堆不是用于管理空闲内存的结构),并且将指向该内存的指针分配到p
中,您不应该为局部变量分配内存。编译器会帮你做的。如果我写int*p=malloc(..),然后把它添加到你的问题中。这真是模棱两可。因为变量p
(或原始问题中的a
)只会占用堆栈上的sizeof(int*)
(或位于寄存器中)。所以问题是,当您调用malloc
并将其分配给变量时会发生什么?这个问题大部分是你自己回答的。