什么是虚拟内存?
什么是进程栈?
什么是线程栈?
这几个知识点是有关联的。
1.虚拟内存
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。与没有使用虚拟内存技术的系统相比,使用这种技术的系统使得大型程序的编写变得更容易,对真正的物理内存(例如RAM)的使用也更有效率。(参考维基百科:虚拟内存)
《深入了解计算机系统》第2版第9章虚拟存储器也有详细讲解
2.在虚拟内存的基础上,看c程序的存储空间分布
引用《unix环境高级编程》第2版
7.6节c程序的存储空间布局:对于x86处理器上的Linux,正文段从0x08048000单元开始,栈底则在0xC0000000之下开始(在这种特定结构中,栈从高地址向低地址方向增长)。堆顶和栈底之间未用的虚地址空间很大。
12.3节线程属性:对进程来说,虚拟地址空间大小的固定的,如果应用程序使用了太多的线程,致使线程栈的累计大小超过了可用的虚拟地址空间,这时就需要减少线程的默认栈大小
ps:栈从高地址向低地址方向增长,这很好的解析了为什么先定义的局部变量地址大,后定义