函数每次调用是不是都在同一块堆栈上分配所需空间?
比如以下运行后结果都是5
除第一次调用外,后边都不曾对n进行赋值操作。分配的地址也都一样
#include <stdio.h>
void
fun(int flag)
{
int n;
if (flag)
n = 5;
printf ( "%d\n ", n);
}
int
main()
#include <stdio.h>
void
fun(int flag)
{
int n;
if (flag)
n = 5;
printf ( "value:%d - address:%x\n ", n, &n);
}
int
main()
{
fun(1);
fun(0);
fun(0);
fun(0);
}
[解决办法]
是的
[解决办法]
我的库里没有pthread.h
上边运行结果是什么?
[解决办法]
不是 因为你写的程序 没有调用别的更多的函数 所以这个堆栈还是分配给了这个函数. 当你用多线程的时候 堆栈发生了变化 地址和值别别的数据覆盖 当然值也变了
[解决办法]
#include <stdio.h>
void foo(int n)
{
int i = 5;
if(n != 1) {
foo(--n);
printf( "%d@%p\n ", i, &i);
}
else
printf( "%d@%p\n ", i, &i);
}
void main()
{
int i = 2;
foo(2);
}
[解决办法]
函数调用分配栈资源从当前的栈指针开始,你的测试程序刚好每次调用fun前栈指针指向了相同位置。
[解决办法]
同意 jie_kai_tong_xun() 的说法
[解决办法]
不是 因为你写的程序 没有调用别的更多的函数 所以这个堆栈还是分配给了这个函数. 当你用多线程的时候 堆栈发生了变化 地址和值别别的数据覆盖 当然值也变了
-----------------------------------------------
不仅仅是这样.
没有改变的只是物理内存的内容,栈空间的分配和释放是在虚拟内存内进行.
严格的说是你上次调用的函数时占用的虚拟栈空间所映射的物理内存空间,在你此次调用只时,没被解除映射或则
又重新映射到相同的虚拟空间,且此间没被改变过内容.