Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在unix系统上调用malloc()时会发生什么_Unix - Fatal编程技术网

在unix系统上调用malloc()时会发生什么

在unix系统上调用malloc()时会发生什么,unix,Unix,malloc()库函数在内部调用brk()或sbrk()系统调用,为数据区域分配内存,因此局部静态变量和全局变量将从堆中分配内存,从而增加数据区域的有效大小。现在我的问题是,当我将内存分配给int*a?这是局部变量时,到底发生了什么。 我可能有误解,如果有,请告诉我。当您调用malloc()访问请求的内存量,或者返回NULL时,谢谢。这就是保证的一切。其他一切都取决于实现。访问该内存的机制可能有很大的不同。int*p本身是一个局部变量,它是一个指针(现在:通常是四个或八个字节,通常在堆栈或寄存器

malloc()库函数在内部调用brk()或sbrk()系统调用,为数据区域分配内存,因此局部静态变量和全局变量将从堆中分配内存,从而增加数据区域的有效大小。现在我的问题是,当我将内存分配给int*a?这是局部变量时,到底发生了什么。
我可能有误解,如果有,请告诉我。当您调用
malloc()
访问请求的内存量,或者返回NULL时,谢谢。这就是保证的一切。其他一切都取决于实现。访问该内存的机制可能有很大的不同。

int*p
本身是一个局部变量,它是一个指针(现在:通常是四个或八个字节,通常在堆栈或寄存器中)。当您执行
p=malloc(…)
时,您是在分配内存(在堆上,或者现在通常称为“堆”的东西,即使堆不是用于管理空闲内存的结构),并且将指向该内存的指针分配到
p

中,您不应该为局部变量分配内存。编译器会帮你做的。如果我写int*p=malloc(..),然后把它添加到你的问题中。这真是模棱两可。因为变量
p
(或原始问题中的
a
)只会占用堆栈上的
sizeof(int*)
(或位于寄存器中)。所以问题是,当您调用
malloc
并将其分配给变量时会发生什么?这个问题大部分是你自己回答的。