编程范式 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年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了 ...
随机推荐
- [转]设置Android手机以使用ARM Streamline进行性能分析(一)
本博客第一次转载的文章,原文访问不到了,这篇是从google cache里挖出来的,为有需要的同学准备.原文地址 Posted by Fang Bao,(鲍方) 4 Comments 11 J ...
- xmind的第八天笔记
- web安全之http协议
http协议 全称是超文本传输协议,是web的核心传输机制,也是服务端和客户端之间交换url的首选协议. url url全称是统一资源定器(统一资源标识符) 顾名思义 每一条格式正确且规范,但url都 ...
- RC上电复位时间计算
高电平复位电路图 V0 为电容上的初始电压值:V1 为电容最终可充到或放到的电压值:Vt 为t时刻电容上的电压值.则, Vt="V0"+(V1-V0)* [1-exp(-t/ ...
- (转)深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0
深度学习主机环境配置: Ubuntu16.04+Nvidia GTX 1080+CUDA8.0 发表于2016年07月15号由52nlp 接上文<深度学习主机攒机小记>,这台GTX10 ...
- C#可扩展编程之MEF学习
MEF系列文章: C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import) C#可扩展编程之MEF学习 ...
- vb6 枚举对象属性
Option Explicit '引用Library TLI ' C:\WINDOWS\system32\TLBINF32.DLL ' TypeLib Information Private Sub ...
- There is already an open DataReader associated with this Command which must be closed first." exception in Entity Framework
Fixing the "There is already an open DataReader associated with this Command which must be clos ...
- Nginx日志导入到Hive0.13.1,同步Hbase0.96.2,设置RowKey为autoincrement(ID自增长)
---------------------------------------- 博文作者:迦壹 博客地址:Nginx日志导入到Hive,同步Hbase,设置RowKey为autoincrement( ...
- RESTful API的重磅好伙伴Swagger2
本文将介绍RESTful API的重磅好伙伴Swagger2,它可以轻松的整合到Spring Boot中,并与Spring MVC程序配合组织出强大RESTful API文档. 它既可以减少我们创建文 ...