C语言-栈
本文最后更新于:1 年前
基础
- 栈是一段连续的内存,需要同时记录栈底和栈顶,才能对当前的栈进行定位。在现代计算机中,通常使用ebp寄存器指向栈底,而使用esp寄存器指向栈顶
ebp: Extend Base Pointer
esp: Extend Stack Pointer
一个程序可以包含多个线程,每个线程都有自己的栈,栈能使用的内存在编译时决定。所以栈内存大小与编译器有关。
在 VC/VS 下,默认是 1M,
在 C-Free 下,默认是 2M,
在 Linux GCC 下,默认是 8M
如果程序使用的栈内存超出最大值,就会发生栈溢出(Stack Overflow)错误。
栈变量大对象传递时的 双向拷贝 现象
调用函数时会先开辟空间,存放临时对象,然后把此临时空间的地址放入eax供被调用者(函数)返回。返回之后,调用者又会将临时空间的内容拷贝到变量中。故大对象传递时应使用指针。
1 |
|