c++编程之内存模型

我们在编程的时候,无可避免要申明变量,在这个变量可以是在()中,可以在{}中,也可以直接在外面,也可以用new的方式.那么当我们在申明变量的时候,实质上我们所做的工作是:关联了一个内存模型

上代码:

 1 #include <iostream>
 2 #include <thread>
 3 #include <chrono>
 4 #include <mutex>
 5 # include<string>
 6 using namespace std;
 7 mutex mtx;
 8 void fn1()
 9 {
10     for (int i = 0; i < 5; i++)
11     {
12         unique_lock<mutex> lock(mtx);
13         cout << "线程" << this_thread::get_id() << ":" << "The thread1 is running !" << endl;
14     }
15 }
16 
17 void fn2()
18 {
19     for (int i = 0; i < 5; i++)
20     {
21         unique_lock<mutex> lock(mtx);
22         cout << "线程" << this_thread::get_id() << ":" << "The thread2 is running !" << endl;
23     }
24 }
25 
26 
27 class fun{
28 private:
29     string name;
30     int age;
31 public:
32     fun(){};
33     fun(string name, int age)
34     {
35         this->name = name;
36         this->age = age;
37     }
38     void ShowName()
39     {
40         cout << name << endl;
41     }
42     ~fun(){};
43 };
44 
45 int main()
46 {
47     thread t1(fn1);
48     thread t2(fn2);
49     t1.detach();
50     t2.detach();
51 
52     this_thread::sleep_for(chrono::milliseconds(1000));
53     fun zhangsan("zhangsan", 5);
54     fun*lisi = new fun("zhangsan", 5);//动态申请的方式,但是要用到指针
55     zhangsan.ShowName();
56     lisi->ShowName();
57     delete lisi;
58     //lisi->ShowName();
59     lisi = nullptr;
60     getchar();
61     return 0;
62 }

我们分析上面程序中的三个典型变量:zhangsan,lisi(在main函数中的),以及第七行的mtx。

zhangsan是一个局部变量,存在于栈空间,lisi也是一个局部变量,但是其采用new的方式,则lisi 属于动态内存分配,存在于堆区,而mtx属于全局变量,存在于某一个静态区。

c++中的典型内存模型为:C++的内存模型 = 静态存储区(全局变量,静态变量)+堆(malloc,new的对象)+栈。

对于上述一段代码,还应该关注的是:如何使用 new ;new 必须和指针变量相关联!!!   用法是:类型 指针 = new 类型

posted @ 2019-08-31 16:47  少年π  阅读(359)  评论(0编辑  收藏  举报