栈的内存分配
栈是系统自动分配的一段内存区间,用户没法干预,栈的内存是从高地址到低地址的。
也就是说,先进栈的变量地址是高于后进栈的。
栈低是最高地址,栈顶是最低地址。
栈的空间较小,容易造成栈溢出。
栈上有几个指针,分别是:
bottom
栈的底端
top
目前栈上最大地址
guard size
栈的安全地址段,为了防止栈溢出导致访问其他程序的栈空间而创建的安全区间。
那么根据这两个变量,能得出如下结论
目前栈的使用空间=top - bottom
guard<=top<=bottom
堆的内存分配
堆是用户自己申请,并自己负责释放的一段内存区间,如果用户没有手工释放,则在程序结束的时候由操作系统负责释放。
堆的内存地址是从低地址到高地址的。也就是说,先申请的地址是小于后申请的地址的。