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