--------内存管理--------
1。环境变量:
每个进程都有自己的环境变量表,环境变量表是一个char* 的数组。 指针数组,每个指针指向一个环境变量(字符串)。最后一个元素为NULL指针。这样就能够让程序知道什么时候结束不取值越界。
2。每个程序都有一个environ变量,指向该表头(指针数组首地址)extern char** environ; (这里要声明这个变量) char **p=environ while(*p){ printf(%s,*p) p++}
3。int main(int argc , char ** argv ,char **env )其实main函数他有第3个参数,那就是指向环境变量表的指针。
4。在C语言中,要想截取字符串,一般都使用指针的移动,和strncpy 来截取,strncmp比较前几个字符。
5。getenv("LANG") <stdlib.h>putenv("LANG=C") setenv("LANG","C",0)//0 不会修改,非0会修改。如果该变量不存在则增加到表中。 unsetenv("MYPATH") clearenv();//删除所有的环境变量,删除了仅仅是这个程序的环境变量表,其他程序不影响。
6。内存管理:
malloc / free -> new /delete STL 用自带的内存分配器来分配:allocator ,这样解决new delete 的效率执行开销问题。
高级---》 低级:
STL -> allocator
C++ -> new /delete
C -> malloc / free
----------------------------------------于平台无关的内存管理函数
仅仅是unix/linux 的:
brk / sbrk --> 系统不会多分配
mmap / munmap --》你自己想杂搞就杂搞
----------------------------------------应用级别的内存管理函数
kmalloc / vmalloc ...
get_free_page
----------------------------------------内核级别的内存管理函数
7。 new / delete 的区别:new 会构造其子对象,new 会调用构造,西沟函数, new 会自动进行类型转换滴。 这3项malloc都不会去做。
8。 new 与 new[] 不是一起的,是分别2个不同的运算符号。
9。 ***********每个进程的内存区域有这5大部分************
1。 代码/正文区域: 只读滴(1.全局的常量, 2 常量字符串 3)
2。数据缎/全局区域:(static 变量也保存在这里。 全局变量有初始化了的变量保存在这里。)
3。Bss段/全局区域: 他和全局区域在一起(全局变量未初始化的,都保存在这里,每次程序运行,bss段的空间都会初始化为 0 )
4。堆空间:自己分配,自己释放
5。栈空间:自动分配,自动释放局部变量要修改,我们要绕过编译器,去修改它。
10。cd /proc 放置内存程序分配状态 /proc/进程ID/maps --> 这个文件可以知道这个进程的实际物理内存地址情况(以页为单位滴)
11。为什么有些文件是0个字节,但是打开有 内容 呢? 因为在磁盘上并没有它,它只是在内存中而已。
12。为什么说:任何程序代码区都是从8048000开始的呢。
从现在开始:我们要从内存的角度去理解这些变量,因为系统他不关心类型,只关注字节是否足够。 4字节可以放整数,也可以放指针,所以可以当整数用字符串使用。因为,对C程序员来说:数据类型都是浮云一片片。
printf("%d %s %g ",*(int*)&buf , (char*)&buf+4 , *((double*)&buf+2) ); 分配空间--变量的定义。
13。堆空间中,空间的分配不是“连续“,因为用malloc来申请空间,其内部是维护着一个“双向链表的数据结构”所以空间后还有一些用于记录,前节点,后节点指针的空间,还有纪律结束标志的变量。所以,他们是节点来的,free一个空间,就是在mallco链表中删除一个节点罢了。
14。虚拟内存管理:(绝大部分的虚拟地址是没哟实际地址映射的。)
每个进程都有自己的虚拟内存地址,因为32位机器,int型最大可以表示4个G大小的地址,所以每个进程都可以有4G的地址表示。 其大家的地址都是相同的。这些都是虚拟地址。 虚拟地址必须要通过系统映射实际内存地址给它,我们才可以访问这个虚拟地址,否则段错误。
15。段错误2个问题: 1。 访问了,读了没有读权限的地址空间 2。 访问了没有映射好的虚拟地址空间 。
16。可以说:内存分配的本质是:内存映射。 虚拟地址还可以映射:文件,网络 等等。。。。
17。让最后一个堆空间越界为什么小一点就不越界,大一点点就越界了呢:因为其实系统给我们分配空间并不是我们想要多少才给多少的,系统它的对齐单位是1页的,在unix/linux下,是4k,即系统每次都会分配按照一页一页的空间来分配,至少一页了。所以其实越界也是可以的,只是不要越出最大页就好了。
18。getpagesize() 获取操作系统一页内存大小。
19 。 #include <unistd.h> unix/linux下的标准函数uni std .h
brk(sbrk(0)+5) 不关心开头,只关心我分配到那里结束就好了。所以通常我们使用sbrk(0)来告诉它,我们的开头和结尾。(往前:释放,往后:申请)。
sbrk(4) 分配字节空间他堆k(-4)释放字节空间堆 --------使用这2个函数是不会浪费空间的,要多少给多少。
20。底层函数实现:mmap / munmap 直接使用系统映射,这个空间我们随便用,不受类型的约束,他有6个参数罢了。
分享到:
相关推荐
成功完成UTP的学生可以继续进入UC的第二年学习。此外,UCIC的预科证书课程可让学生升入UC或UTP的第一年,具体取决于成绩。 UCIC提供的UC学士学位课程包括四年的可选荣誉课程或三年制课程,并且根据学生的成绩,可能...
- **特性**:uC/OS-III是第三代内核,相较于前两代版本,它集成了更多现代实时操作系统的关键功能,如资源管理、同步机制以及任务间通信等。此外,uC/OS-III还引入了一些独特的特性,比如运行时性能监控、直接向任务...
与对照组相比,铬处理后第3天和第7天的结肠大体和组织学评分显着降低。 与对照组相比,铬组的MPO和MDA显着降低,而Cr3 +组的SOD活性显着提高。 与结肠炎后第3天的对照组相比,铬组的总RNA增加。 与对照组相比,铬给...
在第二次免疫前,部分大鼠会口服活菌,以增强模型的复杂性和真实性。 实验中,大肠杆菌菌株通过伊红—美蓝平板培养并鉴定,确保其为大肠杆菌后用于模型建立。免疫后,通过常规方法每3天检查大鼠粪便潜血,以评估...
Google开源的其第二代深度学习技术——被使用在Google搜索、图像识别以及邮箱的深度学习框架。 是一个理想的RNN(递归神经网络)API和实现,TensorFlow使用了向量运算的符号图方法,使得新网络的指定变得相当容易,...
首先,面试前一天应前往考试地点实地考察,如果可能,提前入住周边,熟悉环境可以减轻第二天的紧张感。利用亲友的鼓励来帮助自己放松,比如文中提到的与死党的通话,能够有效地缓解紧张情绪。 其次,在等待面试的...
3. 波粒二象性:光的衍射证明了光的波动性,而光电效应则证实了光的粒子性,两者共同体现了光的波粒二象性。 4. 卢瑟福α粒子散射实验:卢瑟福的实验显示大部分α粒子穿过金箔时并未改变方向,只有少数发生了大角度...
面试前一天,应前往考试地点实地考察,如果可能,最好选择在附近住宿,以便熟悉环境,减少第二天的紧张感。如遇到紧张情绪,可以通过与亲友交流或进行深呼吸等方法放松心情。面试不仅是对知识的检验,更是个人素质和...
1. **面试前一天的准备**:提前一天考察考试地点,如果可能的话在附近住宿,以减少第二天的紧张感。和朋友交流可以有助于缓解压力,比如文中提到的“越洋长途”通话。面试前的心理建设至关重要,要认识到面试只是一...
1994年,我决定写第二本书,《Embedded System Building Blocks, Complete and Ready-to-use Modules in C》。由于某些原因,此书不如μC/OS那么流行,虽然书中很多信息在其他地方是找不到的。我始终认为,对于刚刚...
二、接口类代码问题 第43页 1、对函数参数进行有效性检查 第43页 【案例2.1.1】 第43页 【案例2.1.2】 第43页 【案例2.1.3】 第44页 【案例2.1.4】 第46页 【案例2.1.5】 第47页 【案例2.1.6】 第48页 2、注意多出口...
* 第 2、3 天:学习 MATLAB 语言的应用环境、调试命令和绘图能力 * 第 4、5 天:课程设计 * 第 6-9 天:答辩 * 第 10 天:指导教师签名 五、结论 本课程设计基于 MATLAB 软件的强大功能,着重对 RLC 串联电路的...
"影碟出租管理系统课程设计文档" 本文档旨在设计一个影碟出租...当天借当天还算一天,第二天还算一天。 该系统的设计是为了满足影碟店老板或员工对影碟出租、管理和结帐的需求,旨在提高影碟店的管理效率和安全性。
和dz或uchome整合一起用的心情插件.效果超酷,超级梦幻 演示地址 ... Flexsns 让您的网站动起来!...压缩了原来的两种背景图片,压缩了原来两个背景音乐,总体积加上第二套皮肤仅2.66m,减少sky给服务器的流量压力
通过图像分析,可以得出选项A、B、C的正确性,但D选项的摩擦因数需要利用动能定理或牛顿第二定律计算。 19. 理想变压器问题,涉及电磁感应和电路知识。Q位置不动,P向上滑动,相当于降低副线圈的匝数,使得电压降低...
全新安装时,自动设置计划任务执行时间为第二天0点0分 修正重复发放勋章的BUG,现在系统自动判断是否存在相同的勋章,如果存在,则不再发放,只更新有效时间 修正勋章清理不及时的BUG,现在发放的勋章有效期固定时间...
教程以天嵌科技的TQ S3C2440开发板为基础,提供了丰富的实践操作内容,覆盖了开发环境搭建到高级应用的全过程。本文将详细介绍其中的关键知识点。 一、开发环境建立 开发环境是嵌入式开发的基础,主要包括以下组件...
#### 第二章:AVR32 Studio软件设置与更新 - **软件启动设置**:首次启动AVR32 Studio时,系统会提示选择项目文件的存储位置。若不希望每次启动软件时重复此提示,则可勾选“Use this as the default and do not ...
活动时间:2017年3月6日至2017年3月15日,共十天。 活动预算:2000元(暂定)。 活动规则: 1. 用户上传头像,为女神制作专属红包贺卡。 2. 制作贺卡的所有时间越短,贺卡的红包随机金额越大。 3. 女神收下您的...