编程范式 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年以来已经发生了深刻的变化,这并不简单的意味着出现了大量功能丰富的基础库,使得我们可以更加方便的编写业务代码,更重要的是我们看待前端技术的观念发生了重大转变,明确意识到了 ...
随机推荐
- day12_API第二天
1.Scanner注意问题 1.Scanner中方法 next() -- 查找并返回来自此扫描器的下一个完整标记. nextLine() -- ...
- 不同vlan之间的相互访问
拓扑图: 用到的命令: 给端口的vlan <sw1>用户模式 切换到系统模式 system-view 交换机名称 sysname swj1 创建vlan 3 端口模式选择int g0/0/ ...
- Kubuntu 使用YaH3C进行中大校园网认证
之前都是用路由器连网线上网,我也没注意到inode校园网客户端在linux上的问题.直到前两天把路由器给搞残废了,只能默默的找办法装inode.根据学校网络中心给的教程,在kubuntu上尝试安装in ...
- Kafka实战系列--Kafka API使用体验
前言: kafka是linkedin开源的消息队列, 淘宝的metaq就是基于kafka而研发. 而消息队列作为一个分布式组件, 在服务解耦/异步化, 扮演非常重要的角色. 本系列主要研究kafka的 ...
- Node.js高级编程读书笔记 - 3 网络编程
Outline 3.4 构建TCP服务器 3.5 构建HTTP服务器 3.6 构建TCP客户端 3.7 创建HTTP请求 3.8 使用UDP 3.9 用TLS/SSL保证服务器的安全性 3.10 用H ...
- Appium 解决不能输入中文字符问题
只需在初始化driver方法时,写这两行代码即可: capabilities.setCapability("unicodeKeyboard", "True" ...
- Codeforces Round #165 (Div. 2)
C. Magical Boxes 问题相当于求\[2^p \gt \max{a_i \cdot 2^{k_i}},p \gt k_i\] D. Greenhouse Effect \(dp(i,j)\ ...
- 浏览器收藏夹插件-Xmarks
Xmarks 一一 一款简约实用的浏览器书签同步插件 首先还是想吐槽一下firefox的收藏夹同步功能,感觉不实用,密钥的长度如果不是存到手机或者别的终端,压根没办法实现同步. 而且还区分了,如果两台 ...
- 便捷的php操作mysql库MysqliDb
github 地址:https://github.com/joshcam/PHP-MySQLi-Database-Class MysqliDb -- Simple MySQLi wrapper and ...
- [ActionScript 3.0] AS3.0 让一个视频无缝循环播放的一个偏方
一个视频要循环播放,通常的办法都是播放完后再重新播放,但是不可避免的播放结束和重新开始播放这个时间点上会有停顿,如何解决这个问题,说个偏方吧! package com.views { import f ...