首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于变量的存放位置,该怎么解决

2012-02-21 
关于变量的存放位置谁知道模块变量的存放位置???认为局部/全局静态变量都是存放在静态区对吗?其他类型的变

关于变量的存放位置
谁知道模块变量的存放位置???

认为局部/全局静态变量都是存放在静态区对吗?其他类型的变量是如何存放的?

局部静态变量是线程安全的?

[解决办法]
1.局部变量是在运行时保存在程序栈中.
2.局部/全局静态变量都存放在数据段,数据段属于静态内存区.在C语言中初始化了的全局变量和静态变量都放在.data段中.而未初始化的全局变量或静态变量则放在.bss 段(未初始化数据段),局部变量则在栈中分配内存.
3.看你把此局部静态变量定义在哪里,如果是定义在线程函数内的话,这时由于它的作用域在此线程函数内,所以此时是线程安全的.如果是放在线程函数外,那就有可能不安全了.
[解决办法]
局部静态变量也是非线程安全的。

[解决办法]
第三个问题:如果放在线程函数外为什么不安全?
----------
假设你放在一个函数里面定义一个局部静态变量n, 如果有两个线程都调用foo函数,n的值就可能不是你想要的,所以说 foo如果放在线程函数外为什么不安全.
即使放在线程函数内,如果你多次以建立新线程用了相同的线程函数,此函数内的局部静态变量也不是线程安全的!
int foo()
{
static int n = 0;
n++
return n;
}

热点排行