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

上代码:

 #include <iostream>
#include <thread>
#include <chrono>
#include <mutex>
# include<string>
using namespace std;
mutex mtx;
void fn1()
{
for (int i = ; i < ; i++)
{
unique_lock<mutex> lock(mtx);
cout << "线程" << this_thread::get_id() << ":" << "The thread1 is running !" << endl;
}
} void fn2()
{
for (int i = ; i < ; i++)
{
unique_lock<mutex> lock(mtx);
cout << "线程" << this_thread::get_id() << ":" << "The thread2 is running !" << endl;
}
} class fun{
private:
string name;
int age;
public:
fun(){};
fun(string name, int age)
{
this->name = name;
this->age = age;
}
void ShowName()
{
cout << name << endl;
}
~fun(){};
}; int main()
{
thread t1(fn1);
thread t2(fn2);
t1.detach();
t2.detach(); this_thread::sleep_for(chrono::milliseconds());
fun zhangsan("zhangsan", );
fun*lisi = new fun("zhangsan", );//动态申请的方式,但是要用到指针
zhangsan.ShowName();
lisi->ShowName();
delete lisi;
//lisi->ShowName();
lisi = nullptr;
getchar();
return ;
}

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

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

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

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

c++编程之内存模型的更多相关文章

  1. Java并发编程-Java内存模型

    JVM内存结构与Java内存模型经常会混淆在一起,本文将对Java内存模型进行详细说明,并解释Java内存模型在线程通信方面起到的作用. 我们常说的JVM内存模式指的是JVM的内存分区:而Java内存 ...

  2. x86-TSO : 适用于x86体系架构并发编程的内存模型

    Abstract : 如今大数据,云计算,分布式系统等对算力要求高的方向如火如荼.提升计算机算力的一个低成本方法是增加CPU核心,而不是提高单个硬件工作效率. 这就要求软件开发者们能准确,熟悉地运用高 ...

  3. Java并发编程、内存模型与Volatile

    http://www.importnew.com/24082.html  volatile关键字 http://www.importnew.com/16142.html  ConcurrentHash ...

  4. JAVA多线程编程——JAVA内存模型

    一.何为“内存模型” 内存模型描述了程序中各个变量(实例域.静态域和数组元素)之间的关系,以及在实际计算机系统中将变量存储到内存和从内存中取出变量这样的底层细节,对象最终是存储在内存里面的,但是编译器 ...

  5. 并发编程-Java内存模型

    将之前看过的关于并发编程的东西总结记录一下,本文简单记录Java内存模型的相关知识. 1. 并发编程两个关键问题 并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步. (1)在命令式 ...

  6. 【并发编程】- 内存模型(针对JSR-133内存模型)篇

    并发编程模型 1.两个关键问题 1)线程之间如何通信 共享内存 程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信 消息传递 程之间没有公共状态,线程之间必须通过发送消息来显式进行通信 ...

  7. 并发编程 —— Java 内存模型总结图

    关于 Java 内存模型的类似思维导图. 如有错误,还请指正.

  8. 【CUDA 基础】4.1 内存模型概述

    title: [CUDA 基础]4.1 内存模型概述 categories: - CUDA - Freshman tags: - CUDA内存模型 - CUDA内存层次结构 - 寄存器 - 共享内存 ...

  9. Java并发编程:JMM(Java内存模型)和volatile

    1. 并发编程的3个概念 并发编程时,要想并发程序正确地执行,必须要保证原子性.可见性和有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 1.1. 原子性 原子性:即一个或多个操作要么全部 ...

随机推荐

  1. Android客户端OkHttp的使用以及tomcat服务器的解析客户端发过来的数据

    2020-02-15 21:25:42 ### android客户端客户向服务器发送json字符串或者以参数请求的方式发送数据 其中又分为post请求和get请求 1.activity.xml < ...

  2. 用例建模Use Case Modeling——传感器智能分析引擎

    系统用例分析 我的工程实践小组做的课题主要是实现传感器数据采集平台的设计与开发.该搜索引擎完成对传感器数据的采集和发布,企业可以在平台上上传自己的传感器数据信息,同时也能够浏览市面上其他传感器信息,以 ...

  3. learn about sqlserver files and filegroup

    The filegroup is similar as tablespace in Oracle. At first, I will show that hot to check file amd f ...

  4. 【题解】P1020 导弹拦截

    [题解]P1020 导弹拦截 从n^2到nlogn 第二问就是贪心,不多说 第一问: 简化题意:求最长不下降子序列 普通n^2: for (int i = 1; i <= n; i++) for ...

  5. Centos7.6安装zabbix留纪录

    1)查看系统版本 [root@zabbix-s41 ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@zabbix-s41 ~ ...

  6. FFmpeg命令读取RTMP流如何设置超时时间

    子标题:FFmpeg命令录制RTMP流为FLV文件时如何设置超时时间 | FFmpeg命令如何解决录制产生阻塞的问题0x001: 前言 今天在测试程序时遇到两个问题.Q1:ffmpeg录制RTMP流并 ...

  7. IP multicast IP多播

    https://networklessons.com/multicast/multicast-routing/ IP多播有两种模式,密集模式和稀疏模式: Dense Mode Sparse Mode ...

  8. pt-query-digest 慢日志监控

    一.安装percona-toolkit,以centos为例 yum -y install https://repo.percona.com/yum/percona-release-latest.noa ...

  9. Debug使用

    目录 Debug使用 Debug使用

  10. sublime text安装与使用记录

    一.安装Sublime Text 3 官网 http://www.sublimetext.com/3 进入官网选择所需版本下载 打开ST3,点击菜单 View -> Show Console,会 ...