京口新闻网

2016.8.12  星期五

学习C语言需要理解的内存分配知识

内存应用是软件编程开发程序员在学习编程开发技术知识的时候需要重点掌握的知识点之一,而今天我们就通过案例分析来了解一下,学习C语言需要理解的内存分配知识。学习C语言需要理解的内存分配知识1、理解虚拟内存-错综复杂除非你在处理某些嵌入式系统或内核空间代码,否则你会在保护模式下工作。(译注:指的是x86CPU提出的保护模式,通过硬件提供的一系列机制,操作系统可以用低权限运行用户代码)。这太棒了,你的程序可以有独立的[虚拟]地址空间。“虚拟”这个词在这里很重要。这表示,包括其他一些情况,你不会被可用内存限制住,但也没有资格使用任何可用内存。想用这个空间,你得找OS要一些真东西来做“里子”,这叫映射(mapping)。这个里子(backing)可以是物理内存(并不一定需要是RAM),或者持久存储(译注:一般指硬盘)。前者被称为“匿名映射”。别急,马上讲重点。虚拟内存分配器(VMA,virtualmemoryallocator)可能会给你一段并不由他持有的内存,并且徒劳地希望你不去用它。就像如今的银行一样(译注:应该是指银行存款)。这被称为overcommiting[4](译注:指允许申请超过可用空间的内存),有一些正当的应用有这种需求(例如稀疏数组),这也意味着内存分配不会简单被拒绝。2、理解栈上的内存分配装备箱:alloca()-在调用方的栈帧上分配内存getrlimit()-获取/设置resourcelimitssigaltstack()-设置或获取信号栈上下文变量的有效性受到作用域的限制。在C里,作用域指的就是一对大括号{}。因此每次遇到一个右大括号,对应的变量作用域就结束了。然后是alloca(),在当前栈帧上动态分配内存。栈帧和内存帧(也叫做物理页)不太一样,它只是一组被压到栈上的数据(函数,参数,变量等)。由于我们在栈顶(译注:SP寄存器总是指向栈顶),我们可以使用剩下的栈空间,只要不超过栈大小限制。【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!

上一篇:运城达内web前端开发网页网络优化分析
下一篇:没有了