`
touchinsert
  • 浏览: 1289800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

uc第二天

阅读更多


--------内存管理--------

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个参数罢了。


分享到:
评论

相关推荐

    UltraCompare V8.00.0.1027破解

    第二步:如果事先没有破解或注册,则将弹出注册对话框,在对话框中点击“脱机激活”; 第三步:解压该破解文件,双击运行; 第四步:在破解程序中,把UC注册界面中的User CODE1和User CODE2拷贝到注册程序的对应栏中...

    论文研究 - 三价铬通过抑制炎症和氧化应激促进小鼠实验性结肠炎的愈合

    与对照组相比,铬处理后第3天和第7天的结肠大体和组织学评分显着降低。 与对照组相比,铬组的MPO和MDA显着降低,而Cr3 +组的SOD活性显着提高。 与结肠炎后第3天的对照组相比,铬组的总RNA增加。 与对照组相比,铬给...

    深度学习 21天实战Caffe pdf

    Google开源的其第二代深度学习技术——被使用在Google搜索、图像识别以及邮箱的深度学习框架。 是一个理想的RNN(递归神经网络)API和实现,TensorFlow使用了向量运算的符号图方法,使得新网络的指定变得相当容易,...

    嵌入式实时操作系统uCOSII-邵贝贝

    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、注意多出口...

    可以和dz或uchome整合的许愿天空,比愿望墙高级和梦幻多了

    和dz或uchome整合一起用的心情插件.效果超酷,超级梦幻 演示地址 ... Flexsns 让您的网站动起来!...压缩了原来的两种背景图片,压缩了原来两个背景音乐,总体积加上第二套皮肤仅2.66m,减少sky给服务器的流量压力

    【HUX】发帖之星奖励1.9.2 For Discuz X1.5/X2

    全新安装时,自动设置计划任务执行时间为第二天0点0分 修正重复发放勋章的BUG,现在系统自动判断是否存在相同的勋章,如果存在,则不再发放,只更新有效时间 修正勋章清理不及时的BUG,现在发放的勋章有效期固定时间...

    打造研发执行力.xls

    开发资源中心二部研发人员执行力承诺书 日期:2011年 分类 序号 考核项目 对象 考核要求 日常事务处理 1 严格执行各产品版本开发一级或三级计划完成 全员 由部门经理、产品经理、开发经理共同执行 2 严格...

    iOS指纹验证TouchID应用学习教程

    指纹验证这个功能现在在一些app中经常常见,常常与数字解锁,手势解锁联合起来使用。前几天接到说实现一个指纹验证的功能,捣鼓了挺久,然后今天,我就简单的介绍下...第二步:在appdelegate.m中添加代码 这个不说其实

    疯狂五笔输入法

    第一+倒数第二+最后 对于上复合字根+下独立字根结构和左复合字根+右独立字根结构的汉字适用此方法 码长4=1+1+2 顾ieyi=厂i+卩e+页yi 攀mduo=木m+大d+手uo 5、编码顺序 汉字按书写笔顺编码,每个字根...

    骑士PHP人才系统 4.2.66.zip

    优化 3天内自动刷新简历由刷新1次改为刷新3次(研究院指导);优化 后台系统日志页面;优化 意见反馈页面js代码(滨州人才网指导);优化 运营者承担短信时,邀请面试短信勾选问题(邢台招聘网指导);优化 支付宝支付异步...

Global site tag (gtag.js) - Google Analytics