C++的内存空间分布

一个进程拥有的空间。
从高地址到低地址:
在这里插入图片描述

变量类型

局部常量,全局常量,全局变量,局部变量,局部静态变量,全局静态变量,局部临时变量,全局临时变量。

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程序计数器、寄存器、栈、状态字。
如果某些资源不独享会导致线程运行错误,则该资源就由每个线程独享,而其他资源都由进程里面的所有线程共享。
也就是说一般而言线程访问不了另一个线程的栈上的数据。

猜你喜欢

转载自blog.csdn.net/weixin_45146520/article/details/114396504
今日推荐