1、计算机程序=代码+数据
1、计算机程序代码数据冯诺依曼结构数据和代码放在一起C语言中代码其实就是函数数据就是变量。哈佛结构数据和代码分开存在。例linux系统中代码和数据都在DRAM中这就是冯诺依曼结构。而单片机中代码在Flash中数据在RAM中这就是哈佛结构。2、内存分动态内存DRAM和静态内存SRAM是用来存储可变数据的即变量。也有例外gcc中常量也存在内存而大部分单片机中常量都是存在Flash中。内存管理一般以页面为单位一页一般为4kb页面内部以字节为单位管理。例C语言通过API接口管理内存如malloc/free。C用new/delete。JAVA通过虚拟机来操作内存。3、32位系统内存最多为4G即2的32次方。因为32位系统的数据线与地址线均为32条而地址线的条数就决定了内存地址的划分数量。4、内存位宽内存本身的硬件实现有位宽限制内存芯片之间可以进行串联和并联。从逻辑上讲内存的位宽是任意的。位 1bit 字节 8bit 半字 一般为16bit 字 一般为32bit 。系统和平台不一样字的大小也不一样。5、内存划分内存实际上划分为一个一个的小单元每一个单元的编号就是内存地址编程中指挥联系到内存地址因为内存地址与内存单元是一一对应相互绑定的。内存编制是以字节为单位的即每个地址对应的空间大小为8bit。6、数据类型int 整形该类型与CPU本身的数据位宽是一样的数据类型与内存相匹配才能有最好的性能例如32位系统中编程就推荐使用int型变量这样访问内存效率最高。C语言中数据类型的本质含义表示一个内存格子的长度和解析方法。函数名的实质就是这一段代码的首地址。指针变量和普通变量例如 int a和int *pa和p都代表一个内存地址。7.数组数组首元素a的首地址就称为首元素首地址。数据结构就是研究如何组织在内存中排布数据如何加工数据。最简单的数据结构数组可以管理多个类型相同意义相关的变量数组的优点可随机访问。数组的缺点元素类型必须相同数组大小必须定义时给出。C语言结构体内嵌指针可以实现面向对象。linux就是利用C语言写的具有面向对象功能的系统在JAVA等高级语言中有一些语法技巧可以更改数组的大小但其实这只是一种障眼法。它的工作原理是先重新创建一个新的数组大小为要更改后的数组然后将原数组的所有元素复制进新的数组然后释放掉原数组最后返回新的数组给用户。8.内存管理栈stackC语言中用来保存局部变量栈管理内存分配和回收都是C语言自动完成。因为栈中的内存是反复使用的所以定义局部变量时如果没有初始化该变量则该变量的值是随机的。约束栈的大小是固定的太小容易溢出太大浪费内存。为避免栈溢出C语言中定义局部变量时不能定义太多或太大使用递归来解决问题时一定要注意递归收敛。堆heap随时申请、释放大小块随意。堆内存由操作系统划归给堆管理器来管理向使用者用户进程提供APImalloc/free来使用堆内存。堆管理内存需要手动申请和释放如果申请了之后忘记了释放会容易造成内存泄漏。void *malloc (size_t size);void *calloc (size_t nmemb,size_t size);//nmemb个单元每个单元size字节void *realloc (void *ptrsize_t size);//改变原来申请的空间的大小堆内存申请是必须给定大小然后一旦申请完成大小不变如果要更改只能通过realloc接口。realloc的实现原理类似于上面说的JAVA中的可变大小的数组的方式。

相关新闻