一个进程拥有的空间。
从高地址到低地址:
变量类型
局部常量,全局常量,全局变量,局部变量,局部静态变量,全局静态变量,局部临时变量,全局临时变量。
1、栈
临时变量,函数参数,局部常量。
2、堆
动态分配的变量。(new 或 malloc 分配的。)
堆的效率比栈要慢。
3、静态储存区
全局静态变量,局部静态变量(因此不会随着函数的完成而消失),全局变量。
4、常量区
全局常量。
5、代码区
存放代码。
//main.cpp
int a = 0; //全局初始化区
char *p1; //全局未初始化区
int main()
{
int b; //栈区
char s[] = "abc"; //栈区
char *p2; //栈区
char *p3 = "123456"; //123456在常量区,指针p3在栈上。
static int c =0; //全局(静态)初始化区
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
//分配得来得10和20字节的区域就在堆区。
strcpy(p1, "123456");
//123456放在常量区,编译器可能会将它与p3所指向的"123456"优化成一个地方。
}
多线程时线程独自拥有哪些资源?
PC程序计数器、寄存器、栈、状态字。
如果某些资源不独享会导致线程运行错误,则该资源就由每个线程独享,而其他资源都由进程里面的所有线程共享。
也就是说一般而言线程访问不了另一个线程的栈上的数据。