这一节从后往前写。
____stack and heap
___stack由 汇编语言操控管理,数据先入后出。
栈是存放局部变量,函数调用子函数时,该函数在栈中占用的空间会增大,用于存放子函数的局部变量。很明显的逻辑,必须被调用的子函数的局部变量被释放以后才能存取调用函数的局部变量,先入后出就是这么理所当然的事情。
不是说栈就是定义要求先入后才的,而是程序本身具有这样的需求,给了这个空间一个名字,叫做栈。//这个老师讲得特别基本朴实,把最实在的道理讲给你听,而以前的老师多是生怕自己讲得不够复杂,生怕你听懂似的,简单的东西也弄得复杂以显示自己的学问的高深,这是嘲讽;更多的情况是讲不出来,用简单的话说明白,这真不是谁都能做到的。反正这个老师挺可爱的,特别可爱,非常可爱。
___heap由堆管理器管理
堆的存储,总是从最开始的指针地址开始搜寻,找到需要的空间大小。所以heap中都是一段一段的,因为之前申请的空间可能中途被释放了,那里就空了一块。堆中的空闲空间称为空闲列表。堆管理器利用void* 类型的指针去搜寻空闲列表。下节课会继续。
_____memmove, memcpy
rotate。一个数组,把前面一部分切割移到后面,原来后面的向前移。为了应用和区分memcpy 和 memmove
memmove 可以用于空间overlapping的拷贝,既然多了功能,效率就比较低,所以如果不是必须得用它就不要用,
///jerry说这样去看这件事,要是不该用memmove的时候也用它,计算机性能就会被拖累到崩溃。这老师太好玩了。他热爱他所做的事,对他来所这是非常有趣的,非常美妙神奇的世界。//不是好玩,是因为太在意,太热爱了,太殷切了。
___code, 真是没有简单容易的程序,是程序就有要注意的地方。无所谓难,无所谓易。没有简单容易的程序!!!!!
___指针的减法和加法一样,指针的类型会被隐含计算进去。
rotate(void* front, void* middle,void* end) { //////must char* type, the deduct operation involes the type size!! uchar frontSize = (uchar*)middle - (uchar*)front; uchar backSize = (uchar*)end - (uchar*)middle; uchar buffer[frontSize]; memcpy(buffer,front,frontSize); memmove(front,middle,backSize); memcpy(front+backSize,buffer,frontSize); }
___stack 存放指针类型
编程范式 epesode7 stack存放指针类型and heap
原文:http://www.cnblogs.com/aprilapril/p/4372480.html