关于栈内存的两个问题

qinuxman 发布于 2013/01/21 11:46
阅读 101
收藏 0

       我的一个主要疑问是栈内存的数据结构既然是栈那么只能访问栈顶的变量吗?栈不是不能访问中间的变量,只能访问栈顶,这样的话只能访问一个变量,比如函数有好几个参数的话,那么怎么访问非栈顶的元素的呢?

       另外,栈的大小是系统设定的2M,也就是说int a;或char p*;这样申请的只能限定在2M以内吗?如果程序需要的这种变量大于2M呢?

加载中
0
修改登录密码
修改登录密码

栈内的任何空间都可以访问; 甚至你可以访问超出栈的空间的内存(不保证安全性),堆栈溢出攻击就是这个思路

栈的大小可以设定;   自动变量 如int a; 不能超出栈大小,不然运行必然会导致软件异常;  static不是在栈内分配的; malloc()是在堆内分配,在栈内仅占用一个指针变量的空间



修改登录密码
修改登录密码
回复 @qinuxman : int a和 int *a; a都是存在栈内; 不同的是int a 中 a放的就是a的值; int *a;中a存放的是个指针,指针指向的位置是任意的。
qinuxman
qinuxman
谢谢,你说的栈内存的是指针,如果是int *p;我明白,请问int a;的话栈里面存的是a的指针,那么a的值存在哪里呢?另外在存储和使用上是怎么区分int a;和int *a;
返回顶部
顶部