编程范式 epesode7,8 stack存放指针类型and heap,register
这一节从后往前写。
____stack and heap
___stack由 汇编语言操控管理,数据先入后出。
栈是存放局部变量,函数调用子函数时,该函数在栈中占用的空间会增大,用于存放子函数的局部变量。很明显的逻辑,必须被调用的子函数的局部变量被释放以后才能存取调用函数的局部变量,先入后出就是这么理所当然的事情。
不是说栈就是定义要求先入后才的,而是程序本身具有这样的需求,给了这个空间一个名字,叫做栈。//这个老师讲得特别基本朴实,把最实在的道理讲给你听,而以前的老师多是生怕自己讲得不够复杂,生怕你听懂似的,简单的东西也弄得复杂以显示自己的学问的高深,这是嘲讽;更多的情况是讲不出来,用简单的话说明白,这真不是谁都能做到的。反正这个老师挺可爱的,特别可爱,非常可爱。
___heap由堆管理器管理,是用软件实现的。malloc, remalloc, free
堆的存储,总是从最开始的指针地址开始搜寻,找到需要的空间大小。所以heap中都是一段一段的,因为之前申请的空间可能中途被释放了,那里就空了一块。堆中的空闲空间称为空闲列表。堆管理器利用void* 类型的指针去搜寻空闲列表。下节课会继续。
每次在堆中分配空间时,比如int * arr = malloc(40*sizeof(int));实际分配的空间是大于160,实际上占用164或168个字节,因为需要最开始的一些字节来记录这段内存的大小。_因此一段空间的首地址具有特别的意义,堆管理器的内部软件函数可以在这个首地址的左边的一定字节内找到这段内存的相关信息,比如大小,这样才能正常的对堆进行管理。所以, free(arr+60);这样的语句是错误的,因为首地址是错误的。
_____register
用于对RAM中的数据进行存取。存取RAM中的数到register,再利用RLU(算术逻辑单元)进行计算处理。RAM中的数不能直接利用RLU来处理,因为速度会非常慢,所以必须通过register作为中转再进行处理。
_____memmove, memcpy
rotate。一个数组,把前面一部分切割移到后面,原来后面的向前移。为了应用和区分memcpy 和 memmove
memmove 可以用于空间overlapping的拷贝,既然多了功能,效率就比较低,所以如果不是必须得用它就不要用,
///jerry说这样去看这件事,要是不该用memmove的时候也用它,计算机性能就会被拖累到崩溃。这老师太好玩了。他热爱他所做的事,对他来所这是非常有趣的,非常美妙神奇的世界。//不是好玩,是因为太在意,太热爱了,太殷切了。
___code, 真是没有简单容易的程序,是程序就有要注意的地方。用jerry的话说,there are many things to be messed up.
___指针的减法和加法一样,指针的类型会被隐含计算进去。must char* type, the deduct operation involes the type size!!
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,8 stack存放指针类型and heap,register的更多相关文章
- vector 对象中存放指针类型数据
<<C++ Primer>> 第四版Exercise Section 5.6 的5.1.6 有一道题是这样的:编写程序定义一个vector对象,其每个元素都是指向string类 ...
- Python3学习之路~6.1 编程范式:面向过程 VS 面向对象
编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程,一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很多种 ...
- void类型和void *指针类型(网上摘抄总结)【转】
http://www.blogjava.net/fhtdy2004/archive/2009/07/09/286004.html 现在在学linux编程过程中遇到很多void *指针类型,由于c很早学 ...
- 3、二、c# 面向对像编程。类,结构、C# 数据类型(引用类型、值 类型、指针类型)、ref参数与out参数、方法的重载、静态类型与静态成员、继承与多态、委托与事件
一.类 定义类使用class关键字. <access specifier> class class_name { // member variables 成员变量 <access s ...
- 指针类型(C# 编程指南)
原文地址:https://msdn.microsoft.com/zh-cn/library/y31yhkeb.aspx 在不安全的上下文中,类型可以是指针类型.值类型或引用类型. 指针类型声明采用下列 ...
- Swift中对C语言接口缓存的使用以及数组、字符串转为指针类型的方法
由于Swift编程语言属于上层编程语言,而Swift中由于为了低层的高性能计算接口,所以往往需要C语言中的指针类型,由此,在Swift编程语言刚诞生的时候就有了UnsafePointer与Unsafe ...
- 编程范式感想(一)——在C中进行对模板功能的实现
最近一直在看网易公开课上的编程范式的公开课,斯坦福的教授讲的真的非常到位,感觉还是要好好学习下C还有汇编,熟悉下计算机的内存机制什么的. 大家都知道关于模板或者说范式的问题,基本在很多高级语言上都有实 ...
- Linux Kernel C语言编程范式
介绍 不同的编程语言具有不同的抽象原语(如下),有的原语抽象层次低,有的原语抽象层次高.其中函数式.DSL是这几年十分热门的编程语言概念. 过程式抽象原语:变量 对象式抽象原语:对象 函数式抽象原语: ...
- jQuery中的编程范式
浏览器前端编程的面貌自2005年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了 ...
随机推荐
- 【转载】WebDriver常用的鼠标/键盘操作
注:driver为一个WebDriver的实例,xpath为一个元素的xpath字符串,在本文中一律采用xpath的方式定位元素 1.鼠标右键点击操作:Actions action = new Act ...
- position置顶或某固定位置 兼容ie6ie7
用absolute来模拟fixed效果: /*相当于正常的position:fixed;top:0 */.sl_fixed_top{bottom:auto;top:0;_bottom:auto;_to ...
- HDU 3966 Aragorn's Story
题意:给一棵树,并给定各个点权的值,然后有3种操作:I C1 C2 K: 把C1与C2的路径上的所有点权值加上KD C1 C2 K:把C1与C2的路径上的所有点权值减去KQ C:查询节点编号为C的权值 ...
- 黑马程序员——JAVA基础之编码表
------- android培训.java培训.期待与您交流! --------- 字符编码 字符流的出现为了方便操作字符. 更重要是的加入了编码转换. 通过子类转换流来完成. • I ...
- Artificial-Intelligence BOOKs
All of Statistics: A Concise Course in Statistical Inference The Elements of Statistical Learning:Da ...
- 关于MySql的DBHelper类以及数据分页
前端: <%@ Register Assembly="AspNetPager" Namespace="Wuqi.Webdiyer" TagPrefix=& ...
- JS操作iframe
1. 获得iframe的window对象 存在跨域访问限制. chrome:iframeElement. contentWindow firefox: iframeElement.contentWin ...
- Windows 7 安装 .netfx 4 卡住
net stop wuauserv rename \windows\SoftwareDistribution SoftwareDistribution_old net start wuauserv
- 在命令行中通过adb shell am broadcast发送广播通知
通过命令行执行adb shell am broadcast发送广播通知. adb shell am broadcast 后面的参数有:[-a <ACTION>][-d <DATA_U ...
- 不重启程序使用最新版package
相信很多使用python者都对reload方法比较熟悉了,通过不间断地reload可以实现某一module的热更新,主要就能在不重启应用的情况下实现部分模块的更新.但这种方法仅限于reload当前工作 ...