对一个进程来说,栈内存比较有限,用命令ulimit -s可以看出可用栈的大小,单位为KB,这个值是可扩展,现在我还不了解具体的扩展机制。
全局变量、静态变量、局部变量、由数组获得的内存空间都是栈内存的资源,由数组获得的内存,在跳出作用域后会由系统自动回收。
由malloc分配的内存是堆内存的资源,指针变量存放在栈内存中,指针指向的堆内存的地址。堆内存由malloc调用分配,并由free调用释放回收,如果没有用free调用显式释放,就算指针变量是局部变量,跳出作用域后,从栈中释放,但其指向的堆内存不会释放,不能被再利用,直到进程退出才能释放。
指针可指向栈内存地址,也可指向堆内存地址,指向栈内存地址时,是由数组获得内存地址;指向堆内存地址时,是由malloc分配的内存地址。栈内存不可用free来释放。
要申请一个大于栈内存的地址,只能使用堆内存,通过malloc获取。
阅读(1448) | 评论(0) | 转发(0) |