函数的工作原理——划分RAM搞不懂啊???

1、看到《21天学会C++》P92的函数工作原理之划分RAM,感觉还是迷迷糊糊,不太明白,进一步查询???

2、程序启动时,操作系统(如DOS,Windows等)将依据编译器的需求设置各种内存区域。

对于一个C++程序员来说,经常需要关心的是全局名称空间、自由存储器、寄存器、代码空间和堆栈.

3、寄存器:CPU中的一个特殊存储区域,任意给定时刻指向下一行代码代码的寄存器组的寄存器被称为指令指针。指令指针的任务是跟踪接下来将执行哪一行代码。

4、代码空间:代码本身存放在代码空间中,每行代码都被转换为一系列的二进制形式的指令,然后存储在代码空间中。指令指针中存放了接下来要执行的指令的地址。

5、堆栈:用来存储程序中每个函数说需要的数据,堆栈是后入先出的,跟先入先出的队列形成鲜明对比。堆栈是函数调用时把被调用的函数所需参数压入栈中,以实现函数的调用。

堆栈的具体作用:

1,传递参数(为被调用函数提供参数)

2,保存局部变量

3,保存中间变量

4,在系统中用堆栈保存任务的状态(例如各个寄存器的值)

6、然后讲解的堆栈和函数调用这一块就搞不明白了??

时间: 2024-12-28 00:04:59

函数的工作原理——划分RAM搞不懂啊???的相关文章

C++学习笔记27,虚函数的工作原理

C++规定了虚函数的行为,但是将实现交给了编译器的作者. 通常,编译器处理虚函数的方法是给每一个对象添加一个隐藏成员.隐藏成员中保存了一个指向函数地址数组的指针. 这个数组称为虚函数表(virtual function table,vtbl).虚函数表中存储了为类对象进行声明的虚函数的地址. 例如:基类对象包含一个指针,该指针指向基类的虚函数表. 派生类对象包含一个指针,该指针指向一个独立的虚函数表.如果派生类提供了虚函数的新定义,虚函数表将保存新的函数地址. 如果派生类没有重新定义虚函数,虚函

[转组第7天] | 函数的工作原理

2018-05-04 <C++反汇编和逆向技术>第六章 函数的工作原理 读书笔记 debug版本的函数调用: call func func: push ebp ;保存ebp mov ebp,esp sub esp,40h ;抬高esp,开辟栈空间 push ... ;保存寄存器 ... pop ... ;还原寄存器 add esp,40h ;降低esp,释放局部变量空间 cmp ebp,esp ;检测栈平衡 call __chkesp ;进入栈平衡错误检测函数 mov esp,ebp ;还原e

关于OnPaint函数的工作原理(很详细,很实用) [转载]

地址:http://blog.csdn.net/foreverhuylee/article/details/21889025 用了两年的VC,其实对OnPaint的工作原理一直都是一知半解.这两天心血来潮,到BBS上到处发帖询问,总算搞清楚了,现在总结一下. 对于窗口程序,一般有个特点:窗口大部分的区域保持不变,只有不分区域需要重新绘制.如果将整个窗口全部刷新的画,就做了许多不必要的工作,因而,MFC采用了一套基于无效区的处理机制.在分析无效区处理之前,我们要明白一个现实,现在的机器还不够牛,如

函数的工作原理

函数的工作借助于栈. 栈在内存中是一块特殊的存储空间,它的存储原则是"先进后出",最先被存储的数据最后被释放. esp被称为栈顶指针,ebp称为栈底指针,通过这两个指针寄存器保存当前栈的起始地址与结束地址. esp与ebp之间所构成的空间便成为栈帧.通常,在VC++中,栈帧中可以寻址的数据有局部变量.函数返回地址.函数参数等.不同的两次函数调用,所形成的栈帧也不同.当由一个函数进入到另一个函数中时,就会针对所调用的函数形成所需的栈空间,形成此函数的栈帧.当这个函数结束调用时,需要清除掉

基于arm的C++反汇编 函数的工作原理

栈帧的形成和关闭 各种调用方式的考擦 使用 fp或sp寻址 函数的参数 与返回值 arm指令中立即数存放位置 gdbserver 调试环境 栈帧的形成和关闭 ??栈在内存中是一块特殊的存储空同, 它的存储原则是"先进后出", 即最先被存储的数据最后被释放, 汇编过程通常使用 push 指令与 POP指令对栈空间执行数据压入和数据弹出操作. ??栈结构在内存中占用一段连续的存储空间, 通过sp与 fp这两个栈指针寄存器(在x86上是esp,ebp)来保存当前栈的起始地址与结束地址(又称为

虚函数列表: 取出方法 // 虚函数工作原理和(虚)继承类的内存占用大小计算 32位机器上 sizeof(void *) // 4byte

#include <iostream> using namespace std; class A { public: A(){} virtual void geta(){ cout << "A:A" <<endl; } virtual void getb(){ cout << "A:B" <<endl; } }; class B :public A{ public: B(){} virtual void g

C++中虚函数工作原理和(虚)继承类…

转载请标明出处,原文地址:http://blog.csdn.net/hackbuteer1/article/details/7883531 一.虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数.典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式.vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 vtbl.当

C++中虚函数工作原理

一.虚函数的工作原理 虚函数的实现要求对象携带额外的信息,这些信息用于在运行时确定该对象应该调用哪一个虚函数.典型情况下,这一信息具有一种被称为 vptr(virtual table pointer,虚函数表指针)的指针的形式.vptr 指向一个被称为 vtbl(virtual table,虚函数表)的函数指针数组,每一个包含虚函数的类都关联到 vtbl.当一个对象调用了虚函数,实际的被调用函数通过下面的步骤确定:找到对象的 vptr 指向的 vtbl,然后在 vtbl 中寻找合适的函数指针. 

python中的函数、生成器的工作原理

1.python中函数的工作原理 def foo(): bar() def bar(): pass python的解释器,也就是python.exe(c编写)会用PyEval_EvalFramEx(c函数)运行foo()函数 首先会创建一个栈帧(stack Frame),在栈帧对象的上下文里面去运行这个字节码. import dis print(dis.dis(foo)) #打印字节码 可以尝试着去打印foo的字节码: 关于字节码的解释: LOAD_GLOBAL:首先导入bar这个函数 CALL