
知识点复习
知识点复习归纳
surplus12138
这个作者很懒,什么都没留下…
展开
-
从编译器角度来理解C++代码的编译和链接原理
我们可以在linux系统下进行对下列代码是如何进行编译进行一个理解main.cpp://引用sum.cpp文件里面定义的全局变量以及函数extern int gdata;int sum (int, int) ;int data = 20;int main (){ int a = gdata; int b = data; int ret =sum (a, b); return o;}sum.cpp:int gdata = 10;int sum(int a, int b){原创 2020-10-04 01:20:01 · 258 阅读 · 0 评论 -
从汇编分析函数调用堆栈详细过程
首先由下面简单的代码我们来考虑两个问题:1.main函数调用sum,sum执行完以后,怎么知道回到哪个函数中?2.sum函数执行完,回到main以后,怎么知道从哪一行指令继续运行的?int sum(int a,int b){ int temp = 0; temp = a + b; return temp;}int main(){ int a = 10;//mov dword ptr[edp-4], 0Ah int b = 20;//mov dword ptr[edp-8], 14h原创 2020-10-02 01:06:40 · 1023 阅读 · 0 评论 -
详解进程虚拟地址空间区域划分
众所周知,任何的编程语言都会产生两种东西:数据和指令。那么拿我们c++代码来看,编译链接完成之后在我们Windows上来说会产生一个xxx.exe的可执行文件,现在这个文件放在我们磁盘上,那么cpu肯定是不能直接运行磁盘上的程序的,那么在运行它的时候首先会把这个程序从磁盘上加载到内存当中,那么就涉及到几个问题1.这一个可执行程序的哪些东西将会加载到内存当中?2.加载到内存当中他是如何存放的?3.内存有没有区域的划分?4.划分了以后到底是什么样子?首先我们得搞清楚一点,加载到内存是不可能直接加载到物原创 2020-09-16 14:58:56 · 1226 阅读 · 0 评论