内存与编程小记
来源:互联网 发布:全国安全知识网络竞赛 编辑:程序博客网 时间:2024/05/21 19:32
内存概述:
一个内存单元是和一个编号绑定的,而这个单元就是字节。根据CPU位数(假设32位),其一次能处理32位数据,这显然是最快的,因此把4字节称为一个整形(int),所以常常处理一个int类型变量是快于处理char / bool类型变量,这就涉及到一个问题,定义变量是追求效率还是追求空间的节省?
内存对齐,这实际上就有硬件决定的,由在做内存芯片是多少字节是挨在一起影响的。例如字节数宽为4的bank,0 1 2 3这四个地址就是对齐的,因为他们都挨在一起;而1 2 3 4就不是对齐的。对齐访问速度大于非对齐访问。
程序在内存中的存储的两种方法:
一种是冯诺依曼结构,它将数据和代码放在一起存储;
另一种是哈佛结构,他将数据和代码分开存储。
因为后者的代码段只读无法更改,所以更加安全高效,但编程更加复杂。现在PC机中普编采用冯诺依曼结构,但实际上在CPU内部存在缓存区,用的还是哈佛结构,所以可以总结在CPU外部采用冯诺依曼结构,在CPU内部采用哈佛结构。
编程语言在操作内存时的方法:
(1)汇编直接用内存地址操作,无人管理。
(2)C语言在操作内存时:
栈:定义一般局部变量时,在栈中开辟一块单元,与该变量联系起来。例如int a=5;先在栈中开辟4字节内存,并把首地址与a联系起来,再将5放入该区域(对数组是首元素的首地址)。在这里的变量随着函数的结束而消亡,不需要手动释放,但栈的大小固定,不应定义较大变量。
堆:一般操作较大的,或是常用的变量时,利用malloc(),calloc(),realloc()申请一块内存区域,但一定要记得用free()函数释放掉。一般我们用较大的数组,结构体,链表,哈希表是用。
(3)C++在操作内存时用new(),同样要记得用delete()。
(4)c# / java用虚拟机管理内存,直接new()就行了,你压根不用管。真羡慕你们有自行车的人。。。。。。。
- 内存与编程小记
- 小记Matlab与C#混合编程
- 编程小记
- 编程小记
- 编程小记
- 小记rails内存泄漏
- 共享内存小记
- linux内存小记1
- oracle 内存小记
- swap内存管理小记
- OC内存管理小记
- 关于内存泄漏小记
- java内存优化小记
- android 内存优化小记
- Class内存小记
- 内存泄漏小记
- shell编程小记
- C编程 知识点 小记
- yii场景
- 数学期望,I - Beating the Dataset,Light OJ 1274
- ZooKeeper伸缩性
- 算法分析基础
- poj-1258
- 内存与编程小记
- 合唱队
- HashMap实现原理分析
- red hat linux命令行修改IP
- 怎样防止头文件被重复包含?(两种方式)以及它的影响
- 为个么,每一个明年,都是OLED大发展的年份
- LeakCanary 中文使用说明
- eclipse中输入中文为繁体
- Debug之路-5