函数代码,局部变量等都在进程地址空间的什么地方?

dclchj 2009-10-20 01:46:32
  在看核心编程,有个问题不清楚:

  创建进程后,进程有一个“进程地址空间”;
  在进程中创建线程,每个线程都被分配自已的“堆栈”(用于存放局部变量和参数);

  问题是:以下面伪代码为例,请帮我分析下注释处的数据/代码放在进程地址空间的什么部分。


int FunName() // 代码放在哪?
{
int b;
static int c;
return 0;
}

WINAPI CALLBACK Thread1() // 该代码放在哪?
{
int d; // d存放在哪?
static int e; // e存放在哪?
return 0;
}

int main()
{
int a; //a存在哪?

BeginThreadex(…,Thread1,…);

FunName();
}


(注意,以进程地址空间和线程/函数堆栈作说明,若只说堆栈会有点模糊)
...全文
232 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dclchj 2009-10-20
  • 打赏
  • 举报
回复
谢谢大家,上面回复够详细了。我看完后再结贴。
shenzi 2009-10-20
  • 打赏
  • 举报
回复
http://blog.csdn.net/shenzi/archive/2009/03/04/3957718.aspx
whg01 2009-10-20
  • 打赏
  • 举报
回复
慢了一步。
whg01 2009-10-20
  • 打赏
  • 举报
回复
进程的一切都存储在进程地址空间内,包括编译好的程序、常量、堆栈。DLL也会在进程的地址空间中有映射。
程序运行时,操作系统先解析编译好的可执行文件,然后根据编译选项来初始化栈、堆、代码区、数据区等。这些都是在进程的地址空间内。
代码放在代码区,由段描述符来表示相应的内存是代码还是数据。
局部变量存在栈上。
静态变量和全局变量存在数据区。
晨星 2009-10-20
  • 打赏
  • 举报
回复
我个人还是习惯说“栈”,不说“堆栈”。堆是堆,栈是栈。
首先,线程栈也是位于整个进程地址空间中,因为同一个进程中的各个线程是只享进程的地址空间的。
所有的静态变量都位于进程的静态存储区,这个是不分线程的。
所有的代码都在代码段中,代码段也是不分线程的。其实堆也是不分线程的。只有栈是各个线程独立的。
其它的非静态局部变量都在栈上,当函数在哪个线程中运行时,它的局部变量就分配在哪个线程的栈上(要知道同一个函数可以在多个线程中被调用)。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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