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 类型

转载于:https://www.cnblogs.com/shaonianpi/p/11439585.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值