物理:我们的内存一般用的是DRAM,上面一个电容充电是1,没电是0,(充电放电可不是电脑电源线插入插座这样,高低电频充放,)用不完全导电的硅做电容,让硅掺杂导电,这样就是一个位,存0/1,电脑4G内存,1G是10亿个,电脑里有40亿个,手机也是一样的,内存充放电是有定时器的,充电了时间过了会放电.所以DRAM要便宜,现在普遍用的这个,还有一种,叫做SRAM,叫做静态随机存储,里面是是第二幅一样,优点在于上面电位传进来是1过几亿年都不变,下面输出就是1,中间4个还是6的保持成一种静态,这是相对于DRAM的优点,不用循环充放电,但是缺点也很明显,这么大才构成1个位.
2.计算机读写:计算机读写的最小单位是八位,1个字节
3.操作系统来看,电脑有4G的内存,操作系统都拿来保护起来,自己用和用户用,用户用得申请,用完不还就内存泄漏,耗完了,用完要还(酒店管理的例子),你申请内存用,操作系统给你一块内存,房客要住,你要般房子要住,给的是地址.
4 .谋杀内存:你一次性向操作系统申请的内存是连续的,而且是你要多少给你多少,给不了就不给,或者是给的了但地址不连续也给失败,那怎么谋杀内存,我申请循环申请1M,在申请10M,最后释放1M的,我问要10M,释放的1M加起来绝对超过10M,但可能给失败了,就是因为这些不连续
5 .最大化利用内存:
(1)自己要用到多少内存,一次性申请,然后自己有首地址来存储利用,这样运行时候寻找就从我申请的这点地方里面找,不用从整个4G里面从这里跳到那个地址,从那个地址跳到另外一个不想关的地址找了,提高效率了,或者是你用的空间不止一个,你多次的new, new/detele都是很耗费时间的
(1)自己要用到多少内存,一次性申请,然后自己有首地址来存储利用,这样运行时候寻找就从我申请的这点地方里面找,不用从整个4G里面从这里跳到那个地址,从那个地址跳到另外一个不想关的地址找了,提高效率了,或者是你用的空间不止一个,你多次的new, new/detele都是很耗费时间的
(2)内存强度说:提倡少用不用全局,多用局部
程序运行10s,我要用1个int变量a存5,我建成全局的,全局的会在运行开始之前存在,程序运行结束关闭,那这样我4个字节*10s,=40byte/s
a我建成局部的,函数退出a释放,那这样,函数是程序一部分,运行了3s,那这样我的4个字节*3s=12byte/s,在或者你说我a要多个地方用,用了三次,每次3s,那强度是
12byte/s,不管怎么说,除去你写的函数,程序运行的main这些本身的东西都是有时间的,所以局部变量肯定时间强度小于程序周期
————————————————————————————————————————————————————————————————程序周期 10s
————————————————————————————————————————————————————成员变量
———— ———— ———— 局部变量
可以联系玩一下申请int类型空间,里面存了5,地址存为05 00 00 00,当你想存6/7/8的时候,不用在开辟空间,通过地址偏移,05 06 07 08
可以联系玩一下申请int类型空间,里面存了5,地址存为05 00 00 00,当你想存6/7/8的时候,不用在开辟空间,通过地址偏移,05 06 07 08