线性区域存储空间是否可以理解为函数中定义变量时的static

窗外蓝天 2012-01-16 04:44:55
书上的原话是:
多线程程序中的整体变量(以及任何被配置的内存)被程序中的所有线程共享。在一个函数中的局部静态变量也被使用函数的所有线程共享。一个函数中的局部动态变量是唯一于各个线程的,因为它们被储存在堆栈上,而每个线程有它自己的堆栈。
对各个线程唯一的持续性储存空间有存在的必要。

可不可以理解为一般定义变量时使用的关键字static?
...全文
159 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
窗外蓝天 2012-02-10
  • 打赏
  • 举报
回复
诶,又没人了。。
窗外蓝天 2012-01-18
  • 打赏
  • 举报
回复
一定要搞明白,不顶太容易沉了。
aozhi 2012-01-18
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 q408384053 的回复:]

是不是说线性区域储存空间内的变量,线程外部也可以使用,是不?
[/Quote]

lz去学习一下保护模式下,LDT段描述符以后,再讨论这个问题就明白了。
东莞某某某 2012-01-17
  • 打赏
  • 举报
回复
线程总是在某个进程环境中创建的,而且它的整个寿命期都在该进程中。这意味着线程在它的进程地址空间中执行代码,并且在进程的地址空间中对数据进行操作。因此,如果在单进程环境中,你有两个或多个线程正在运行,那么这两个线程将共享单个地址空间。这些线程能够执行相同的代码,对相同的数据进行操作。这些线程还能共享内核对象句柄,因为句柄表依赖于每个进程而不是每个线程存在。
窗外蓝天 2012-01-17
  • 打赏
  • 举报
回复
那这个线性区域存储空间中储存的变量与线程中的动态变量有什么区别?
窗外蓝天 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 anyidan 的回复:]

哪本书?

一个函数中的局部动态变量是唯一于各个线程的,因为它们被储存在堆栈上,而每个线程有它自己的堆栈。

有点问题。
每个线程自己的堆栈也属于进程的 虚拟地址空间,而进程中的所有线程共享之。(可以通过指针在一个线程中修改另一个线程的 local variable)
[/Quote]
Windows程序设计
Defonds 2012-01-17
  • 打赏
  • 举报
回复
静态变量?
窗外蓝天 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 aozhi 的回复:]

引用 4 楼 zhaoxukun 的回复:

引用 2 楼 aozhi 的回复:
也可以是一个非静态的全局变量。

这个说法有问题,全局变量和静态变量不是在堆上分配内存的,它们是在静态存储区,函数中如果有static变量,则该函数对应的每个线程共享这个static变量所占内存。只有动态分配的内存才是在堆上分配的。

引错了吧,哥们儿?
[/Quote]
是不是说线性区域储存空间内的变量,线程外部也可以使用,是不?
aozhi 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zhaoxukun 的回复:]

引用 2 楼 aozhi 的回复:
也可以是一个非静态的全局变量。

这个说法有问题,全局变量和静态变量不是在堆上分配内存的,它们是在静态存储区,函数中如果有static变量,则该函数对应的每个线程共享这个static变量所占内存。只有动态分配的内存才是在堆上分配的。
[/Quote]
引错了吧,哥们儿?
AnYidan 2012-01-16
  • 打赏
  • 举报
回复
The memory model for the separate thread stacks is not as clean. These
stacks are contained in the stack area of the virtual address space, and are usually

accessed independently by their respective threads. We say usually rather than
always, because different thread stacks are not protected from other threads. So
if a thread somehow manages to acquire a pointer to another thread's stack, then
it can read and write any part of that stack.
AnYidan 2012-01-16
  • 打赏
  • 举报
回复
哪本书?

一个函数中的局部动态变量是唯一于各个线程的,因为它们被储存在堆栈上,而每个线程有它自己的堆栈。

有点问题。
每个线程自己的堆栈也属于进程的 虚拟地址空间,而进程中的所有线程共享之。(可以通过指针在一个线程中修改另一个线程的 local variable)
程序人生 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 forever_feng 的回复:]
全局变量和静态变量都是在堆上分配内存。
全局变量是在main函数之前初始化,分配内存。
函数中的static变量,是第一次调用函数时初始化并分配内存。
局部的静态变量的可见性仅限于该函数内部。
[/Quote]
这个说法有问题,全局变量和静态变量不是在堆上分配内存的,它们是在静态存储区,函数中如果有static变量,则该函数对应的每个线程共享这个static变量所占内存。只有动态分配的内存才是在堆上分配的。
程序人生 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 aozhi 的回复:]
也可以是一个非静态的全局变量。
[/Quote]
这个说法有问题,全局变量和静态变量不是在堆上分配内存的,它们是在静态存储区,函数中如果有static变量,则该函数对应的每个线程共享这个static变量所占内存。只有动态分配的内存才是在堆上分配的。
平凡的思想者 2012-01-16
  • 打赏
  • 举报
回复
全局变量和静态变量都是在堆上分配内存。
全局变量是在main函数之前初始化,分配内存。
函数中的static变量,是第一次调用函数时初始化并分配内存。
局部的静态变量的可见性仅限于该函数内部。
aozhi 2012-01-16
  • 打赏
  • 举报
回复
也可以是一个非静态的全局变量。
_hug 2012-01-16
  • 打赏
  • 举报
回复
不可以

70,032

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧