1. 局部变量是存放在栈中,还是存放在堆栈中
你好!
程序中的局部变量存放在栈中,因而不能太大,如:
double
a[1000][1000];就可能不能通过编译。用户动态分配的内存,分配于堆中,可以很大。如
double
**a
=
new
double
*[1000];
for(int
i
=
0;
i
<
1000;
++i)
a[i]
=
new
double
[1000];
希望对你有所帮助,望采纳。
2. Keil for C51函数调用后其局部变量不会放到栈中,那定义的变量是不是就类似于静态变量了
如果变量在函数外部 或者函数内部用static修饰,那变量属于静态存储,编译的时候就已经分配好空间了,有初始值,类似于静态变量
3. 单片机全局变量 局部变量 堆与栈 的区别
你理解的基本正确!
局部变量空间,就是堆栈空间,也就是栈空间。
从局部变量声明的时候,它就在堆栈空间了,而不是调用函数的时候,才让它入栈的。
堆和栈是两码事情,通常我们所说的堆栈,是指栈。
堆,是一种结构,是从全局区,分配一段区间,然后由一种内存分配算法进行管理。
另外,还有一个区,是常量区。
4. 单片机C语言在声明变量默认放在DATA区吗,就是堆栈区,是不是全局变量局部变量都在
一般情况下定义的变量都是data 区的,你也可以在定义变量时在全面加上关键词,把变量定义到不同的区域里。。。当片内地址空间用完时,还可以定义片外的地址。。。现在很多单片机内部都集成有片外的存储区。。。有关的关键字你可以参考下面这位大神总结的。。。。。
http://blog.csdn.net/dashon2011/article/details/6929647
5. 关于单片机在调用子程序时,进行了怎样的堆栈操作
“断点的PC值入栈,还有哪些东西呢?”
取决于子程序的类型和编程方式。有些特殊类型的子程序是需要入栈的,若采用高级语言编程则编译器会自动添加相应的入栈出栈语句。
“有人说临时变量不入栈,那CPU从子程序运行退回断点时,临时变量的值是如何恢复的呢?”
呵呵,为何要恢复?调用子程序的时候会从局部变量块中新分配空间的,如同你后半部分所说。
6. 为什么方法中的局部变量使用final修饰后,放在堆中,而不是栈中
老兄,我也不民懂,查了一下,final修饰的变量变了常量
栈中只放临时动态的变量,
堆中放长久动态的变量,
我想所有常量是放全局变量区域里。不是堆也不是栈,可能看起来像堆
7. 栈用来调用函数时保护断点,局部变量为什么也入栈
局部变量压在栈里,是为了释放更多的寄存器,可以灵活得使用寄存器实现具体运算。当运算不需要引用局部变量的时候,局部变量就在栈里,当运算需要局部变量的时候,就从栈里取出局部变量的值到寄存器里。
局部变量也常驻寄存器,就是在定义局部变量的时候加register修饰。
栈有个栈顶指针寄存器SP,压栈的时候,可以通过SP进行一定的偏移(这些偏移量在编译的时候就已经确定下来了,不会在运行的时候找不到)来得到某个局部变量存放的位置,从而从这个位置读取局部变量的值,并不要通过出栈操作来获取他们的值。