-
[c++] 内存模型
- 程序代码区用来保存指令,常量区、全局数据区、堆、栈都用来保存数据
- 常量区和全局数据区有时也被合称为静态数据区,意思是这段内存专门用来保存数据,在程序运行期间一直存在
- 函数被调用时,会将参数、局部变量、返回地址等与函数相关的信息压入栈中,函数执行结束后,这些信息都将被销毁。所以局部变量、参数只在当前函数中有效,不能传递到函数外部,因为它们的内存不在了
- 常量区、全局数据区、栈上的内存由系统自动分配和释放,不能由程序员控制。程序员唯一能控制的内存区域就是堆(Heap):它是一块巨大的内存空间,常常占据整个虚拟空间的绝大部分,在这片空间中,程序可以申请一块内存,并自由地使用(放入任何数据)。堆内存在程序主动释放之前会一直存在,不随函数的结束而失效。在函数内部产生的数据只要放到堆中,就可以在函数外部使用
- 在32位环境下,Windows 默认会将高地址的 2GB 空间分配给内核(也可以配置为1GB),而将剩下的 2GB 空间分配给用户程序
- 对于64位程序,内核占用最高的 248TB,用户程序占用最低的 8TB
- 每个线程的栈都是独立的,所以一个进程中有多少个线程,就有多少个对应的栈,对于 Windows 来说,每个线程默认的栈大小是 1MB
- 一个可执行程序就是一个进程,前面我们使用C语言编译生成的程序,运行后就是一个进程。进程最显著的特点就是拥有独立的地址空间
- 程序是存储在磁盘上的一个文件,是指令和数据的集合,是一个静态的概念;进程是程序加载到内存运行后一些列的活动,是一个动态的概念
-
相关阅读:
幻方~未完待续
过河(DP)
生日蛋糕(DFS)
n皇后问题<dfs>
POJ 1182_食物链
POJ 2431 Expedition【贪心】
POJ 3268_Silver Cow Party
POJ 1061 青蛙的约会【扩欧】
【数学】扩展欧几里得算法
Codeforces 404D Minesweeper 1D
-
原文地址:https://www.cnblogs.com/cxc1357/p/11809619.html
Copyright © 2020-2023
润新知