编程语言与内存
一颗日成
这个作者很懒,什么都没留下…
展开
-
用户模式和内核模式
首先我们要解释一个概念——进程(Process)。简单来说,一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间。严格来说,程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后一些列的活动,是一个动态的概念。“程序的地址空间”的说法,这其实是不严谨的,应该说“进程的地址空间”。一个进程...翻译 2019-08-04 21:39:24 · 8291 阅读 · 1 评论 -
计算机内存的分页机制
计算机内存的分页机制 当计算机运行时,某个时间段内,它只是使用了一小部分的数据。其他数据在一个时间段内并不会被使用。 如果以整个程序为单位进行映射,会把不需要的数据读取到内存中,也会把过多的数据写入到磁盘,这种情况会降低程序的运行效率。 为解决这个问题,就有了内存的分页机制,使用分页的方式来对虚拟空间和物理空间进行分割和映射,提高程序的运行效率。 分页的思想是指把地址空间人为地分成...原创 2019-07-28 21:32:04 · 1437 阅读 · 0 评论 -
浅谈C语言的虚拟内存
浅谈C语言的虚拟内存 学过C语言后可知,在C语言中,指针变量就是一个内存地址, &运算符的作用也是取变量的内存地址。 如果我们运行的程序较多,占用的空间就会超过内存(内存条)容量。例如计算机的内存容量为2G,却运行着10个程序,这10个程序共占用3G的空间,也就意味着需要从硬盘复制 3G 的数据到内存,这显然是不可能的。 操作系统为我们解决了这个问题:当程序运行需要的空间大于内...原创 2019-07-28 21:07:32 · 1703 阅读 · 1 评论 -
浅谈C语言程序在Linux下的内存布局
浅谈C语言程序在Linux下的内存布局 在了解内存布局前,先要了解程序的虚拟地址空间以及编译模式。 所谓的虚拟空间,就是程序可以使用的虚拟地址的有效范围。虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响。 先了解CPU,然后再了解编译模式。再来看程序在内存中的分布。一、CPU CPU是计算机的核心,决定了计算机的数据...原创 2019-08-19 22:00:54 · 738 阅读 · 0 评论 -
C++对象的内存模型
C++对象的内存模型类是创建对象的模板,不占用空间,不存在于编译后的可执行文件中;而类的实例化对象就需要使用内存来存储。对象被创建时会在栈区或者堆区分配内存。不同对象的成员变量可能不同,需要每个对象分配内存来存储。但是不同对象的成员函数的代码是一样的。相同的成员函数,编译器可以将代码压缩成一份。在内存中,编译器会将成员变量和成员函数分开存储:分别为每个对象的成员变量分配内存,但是所有对...原创 2019-08-23 22:37:56 · 169 阅读 · 0 评论 -
C语言的动态分配内存
C语言的动态分配内存静态内存分配 定义:在C语言的程序空间中,可知代码区、常量区、全局数据区的内存在程序启动时就已经分配好了,这些地址空间大小固定,不能由程序分配和释放,只能等程序运行结束由系统来进行回收。动态内存分配 定义:栈区和堆区的内存在程序运行期间可以根据实际需求来分配和释放,不用在程序刚启动时就分配内存。栈和堆的区别栈区内存由系统分配和释放;堆区内存由程序员掌控。程...原创 2019-08-22 20:01:37 · 519 阅读 · 0 评论