ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

c++编程之内存模型

2019-08-31 16:50:22  阅读:237  来源: 互联网

标签:mtx 变量 编程 c++ lisi 内存 new include


我们在编程的时候,无可避免要申明变量,在这个变量可以是在()中,可以在{}中,也可以直接在外面,也可以用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 类型

标签:mtx,变量,编程,c++,lisi,内存,new,include
来源: https://www.cnblogs.com/shaonianpi/p/11439585.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有