原文:深入理解C指针之二:C内存管理 内存管理对所有程序来说都很重要。有时候内存由运行时系统隐式的管理,比如为变量自动分配内存。在这种情况下,变量分配在它所处的函数的栈帧上(每个函数都有它自己的栈帧,用来保存它的局部变量和返回地址等)。如果是静态或全局变量,内存处于程序的数据段,会被自动清零。数据段...
分类:
其他好文 时间:
2015-01-05 16:33:04
阅读次数:
113
在进程中对于局部变量是怎么分配的,以及函数是怎么调用的其实也就是讲解栈区的具体使用过程。( 下面代码图摘要于网络)
首先,我们要知道,栈中存放的是一个个被调函数所对应的堆栈帧,当函数fun1被调用,则fun1的堆栈帧入栈,fun1返回时,fun1的堆栈帧出栈。什么是堆栈帧呢,堆栈帧其实就是保存被调函数返回时下一条执行指令的指针、主调函数的堆栈帧的指针、主调函数传递给被调函数的...
分类:
编程语言 时间:
2015-01-05 09:35:38
阅读次数:
144
backtrace()系列函数注意事项:
这三个函数都假设函数的返回地址按它认为的方式保存在栈上,故使用时应注意:
1、帧指针(Frame pointers)的屏蔽/忽略可能导致上述假设失效
2、inline关键字描述的函数没有栈帧(stack frames)
3、尾调用(Tail-call)优化会造成一个栈帧被另一个替换掉
4、对于特定编译器,应该指定链接选项,否则函数名字段可能是无效的;对于使用GNU linker的系统,使用-rdynamic链接项
5、static关键字描述的函数不会被显示,an...
分类:
系统相关 时间:
2014-12-24 21:34:52
阅读次数:
726
第8章 虚拟机字节码执行引擎8.2 运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构。 每一个栈帧包括了局部变量表、操作数栈、动态连接、方法返回地址和一些额外的附加信息。 在活动线程中,只有位于栈顶的栈帧才是有效的,称为当前栈帧 Current S...
分类:
编程语言 时间:
2014-12-23 22:31:15
阅读次数:
225
参数入栈:将参数从右向左依次压入系统栈中返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行代码区跳转:处理器从当前代码区跳转到被调用函数的入口处栈帧调整:具体包括保存当前栈帧状态值,已备后面恢复本栈帧时使用(EBP入栈) push ebp将当前栈帧切换到新栈帧。(将E....
分类:
其他好文 时间:
2014-12-23 17:14:05
阅读次数:
140
转自:http://blog.csdn.net/yxysdcl/article/details/5569351首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈...
分类:
其他好文 时间:
2014-12-22 19:27:18
阅读次数:
105
内存管理对所有程序来说都很重要。有时候内存由运行时系统隐式的管理,比如为变量自动分配内存。在这种情况下,变量分配在它所处的函数的栈帧上(每个函数都有它自己的栈帧,用来保存它的局部变量和返回地址等)。如果是静态或全局变量,内存处于程序的数据段,会被自动清零。数据段是一个区别于可执行代码和运行时系统.....
分类:
其他好文 时间:
2014-12-21 11:27:20
阅读次数:
170
在读程序源代码时,时不时地看到alloca这个函数。一开始并没有多在意,直到今天看>时才留意了下。微软MSVC提供的是_alloca。简要说明:它的动作方式及功能跟malloc差不多,都是内存分配。但alloca是在当前调用者函数的栈帧上分配的,而不是在堆中。优点:当函数返回时,自动释放该内存。无需...
分类:
编程语言 时间:
2014-12-19 23:21:04
阅读次数:
657
[last updated :2014/11/7]
JVM运行时数据区(JVM Runtime Area)其实就是指JVM在运行期间,其对计算机内存空间的划分和分配。本文将通过以下几个话题来讨论JVM运行时数据区。
Topic 1. JVM运行时数据区里有什么?Topic 2. 虚拟机栈 是什么?虚拟机栈里有什么?Topic 3.栈帧是什么?栈帧里有什么?Topic ...
分类:
编程语言 时间:
2014-12-18 15:18:14
阅读次数:
178
10.1.1避免尾递归的堆栈溢出
对于每一个函数调用,运行时分配一个栈帧(stack frame)。这些帧保存在由系统维护的栈中;调用完成,栈帧被删除;如果函数调用其他函数,那么,一个新的帧添加到这个栈的顶部。栈的大小是有限的,所以,太多的嵌套函数调用会耗光了给其他栈帧的空间,就不能再调用下一个函数了。在 .NET 中发生这种情况时,会引发 StackOverflowException 错...
分类:
其他好文 时间:
2014-12-17 18:40:28
阅读次数:
206