函数调用堆栈

匿名 (未验证) 提交于 2019-12-02 23:46:01

c++

c++程序调用内核堆栈的呢?

CPU

cpu

回想这个时先回想一下虚拟空间的空间布局和调用约定

int sumint aint b

{

tmp=a+b;

return tmp;

}

int main()

{

int b=20;

ret=sum(a,b);

Printf(“%d”,ret);

}

1G3G

128M

0x00000000

--

0x0804 8000

.text

.data

.bss未初始化

(执行前清0

heap

共享库

stack

环境变量

0xc000 0000

DMA

NORMAL

HIGHMEM

0xffff ffff

函数调用的具体情况:

Push pop eaxebx

ebpespcall

4eax8

具体实现如下:

tmp

mainebp

下一条指令的地址 (&&printf

X X X X X X X X X X

mainCRTstartup

关于四种调用约定:

pasclcall

_cdeclc

_stdcallwindows

_fastcall

1)_stdcall

2)4 stdcall

_thiscallc++

//

c++

cc++

c++/text

栈:局部变量,参数,编译器自动开辟释放,相当于计算机系统的数据结构分配专门的寄存器来存储栈的地址,所以效率较高,内存空间连续,但由于向下开辟,空间有限

newmalloc

/databass

data

text

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!