C++核心编程 1 程序的内存模型】的更多相关文章

1.内存分区模型 C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理(写的所有代码都在代码区) 全局区:存放全局变量.静态变量以及常量 栈   区:由编译器自动分配释放,存放函数的参数值,局部变量等 堆   区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 内存四区的意义:不同区域的数据,赋予不同的生命周期,给我们更大的灵活编程 程序运行前: 在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域 代码区: 存放CPU执行…
STM32F4编程手册学习2_内存模型 1. 内存映射 MCU将资源映射到一段固定的4GB可寻址内存上,如下图所示. 内存映射将内存分为几块区域,每一块区域都有一个定义的内存类型,一些区域还有一些附加的内存类型. 内存类型有以下几种: Normal 处理器可以为了性能而对访问该区域的任务进行重排序. Device 处理器保证访问该内存的任务与其他访问Device或者Stronly-ordered内存的任务相对顺序不变. Stronly-ordered 处理器保证该访问该内存的任务与所有其他任务保…
1. 并发编程的3个概念 并发编程时,要想并发程序正确地执行,必须要保证原子性.可见性和有序性.只要有一个没有被保证,就有可能会导致程序运行不正确. 1.1. 原子性 原子性:即一个或多个操作要么全部执行并且执行过程中不会被打断,要么都不执行. 一个经典的例子就是银行转账:从账户A向账户B转账1000元,此时包含两个操作:账户A减去1000元,账户B加上1000元.这两个操作必须具备原子性才能保证转账安全.假如账户A减去1000元之后,操作被打断了,账户B却没有收到转过来的1000元,此时就出问…
目录 计算机系统的一致性 Java内存模型 内存模型的3个重要特征 原子性 可见性 有序性 指令重排序 volatile关键字 保证可见性和防止指令重排 不能保证原子性 计算机系统的一致性 在现代计算机操作系统中,多任务处理几乎是一项必备的功能,因为嵌入了多核处理器,计算机系统真正做到了同一时间执行若干个任务,是名副其实的多核系统.在多核系统中,为了提升CPU与内存的交互效率,一般都设置了一层 "高速缓存区" 作为内存与处理器之间的缓冲,使得CPU在运算的过程中直接从高速缓存区读取数据…
锁的升级和对比 java1.6为了减少获得锁和释放锁带来的性能消耗,引入了"偏向锁"和"轻量级锁". 偏向锁 偏向锁为了解决大部分情况下只有一个线程持有锁的情况. 大概逻辑是:每次获得锁时,在锁的对象头信息中存储了当前线程的ID,下次获取锁的时候,不需首先使用CAS竞争锁,只需要去对象头里查看是否是当前线程的ID即可. ps:其实对象头中的线程ID应该时刻变化的,不知道细节是怎么处理的.暂时就了解到这一步.不再深入学习. 轻量级锁 轻量级锁使用自旋的CAS获取锁.…
JAVA内存模型 在多线程这一系列中,不去探究内存模型的底层 一.什么是内存模型,为什么需要它 在现代多核处理器中,每个处理器都有自己的缓存,定期的与主内存进行协调: 想要确保每个处理器在任意时刻知道其他处理器正在进行的工作,将需要很大的开销:且通常是没必要的 我们只有在需要跨线程共享数据时,才需要知道信息:而在JAVA中就是通过正确的同步来实现 1.重排序 如下:判断输出的值将十分困难 public class PossibleReordering { static int x = 0, y…
进程间通信的方式有很多种,其底层原理使用的都是内存映射文件. 本文实现了Windows核心编程第五版475页上的demo,即使用内存映射文件来在进程间通信. 进程1 按钮[Create  mapping of Data]用来创建命名内存映射文件,后备存储器为页交换文件,而非磁盘上的文件,大小为4K,将全部大小映射到进程地址空间,将Data中的数据写入该内存映射文件,然后撤销对文件视图的映射.注意在进程1里不能CloseHandle(m_hFileMapping) 进程2 按钮[Open mapi…
这段时间,都在做Ring3层的普通32bit程序兼容64bit操作系统的代码修改,在此记录修改和学习心德.编程领域太广, 任何人经历有限,本人不是专家,所以我一贯原则是: 用到的时候,才去研究,在去记录.只要个人的基础知识扎实,吸收一些新的东西,还是蛮顺利的. 1. 64bit操作系统的重定向机制以及目的   在64bit操作系统中,为了无缝兼容32bit程序的运行,64bit的Windows操作系统采用重定向机制.目的是为了能让32bit程序在64bit的操作系统不仅能操作关键文件文夹和关键的…
17.3 使用内存映射文件 若要使用内存映射文件,必须执行下列操作步骤: 1) 创建或打开一个文件内核对象,该对象用于标识磁盘上你想用作内存映射文件的文件. 2) 创建一个文件映射内核对象,告诉系统该文件的大小和你打算如何访问该文件. 3) 让系统将文件映射对象的全部或一部分映射到你的进程地址空间中. 当完成对内存映射文件的使用时,必须执行下面这些步骤将它清除: 1) 告诉系统从你的进程的地址空间中撤消文件映射内核对象的映像. 2) 关闭文件映射内核对象. 3) 关闭文件内核对象. 下面将详细介…
第1 7章 内存映射文件 对文件进行操作几乎是所有应用程序都必须进行的,并且这常常是人们争论的一个问题.应用程序究竟是应该打开文件,读取文件并关闭文件,还是打开文件,然后使用一种缓冲算法,从文件的各个不同部分进行读取和写入呢?M i c r o s o f t提供了一种两全其美的方法,那就是内存映射文件. 与虚拟内存一样,内存映射文件可以用来保留一个地址空间的区域,并将物理存储器提交给该区域.它们之间的差别是,物理存储器来自一个已经位于磁盘上的文件,而不是系统的页文件.一旦该文件被映射,就可以访…