c++
weixin_41521306
这个作者很懒,什么都没留下…
展开
-
编译链接过程原理
首先我们引入4G虚拟地址空间,来进一步阐述编译链接原理。保留区:举个例,我们经常使用NULL初始化指针变量,NULL的地址为0x00,因为NULL == 0x0,将其指针指向0x0这个地址时,因为0x0这个地址属于保留区,没有访问权限的。通常是128M,但也不是固定的。.text段:代码段,这个区域存储的是代码中的指令。指令:一份代码是由数据和指令构成的,除数据外剩下的都叫做指令,另外...原创 2019-01-18 21:14:00 · 308 阅读 · 0 评论 -
c和c++的区别
函数参数可以赋默认值(C++)在函数声明或者定义的地方,给参数赋默认值;在同一作用域下(或者说同一文件内,因为在程序只会依据本文件中的默认值生成指令,而不会管另外的文件传的默认值),函数参数赋默认值的顺序为从右至左,不可重复赋值。 在函数调用的时候,可不必穿参数,会默认传默认值;宏函数和inline(内联)函数(C++)宏函数的特点:不存在栈帧的开辟;不存在参数的带入;不存在返回...原创 2019-01-19 23:23:38 · 219 阅读 · 0 评论 -
const和#define的区别,详细!
区别:(1)就起作用的阶段而言: #define是在编译的预处理阶段起作用,而const是在 编译、运行的时候起作用 (2)就起作用的方式而言: #define只是简单的字符替换,没有类型检查,存在边界的错误;const对应数据类型,进行类型检查; ...原创 2019-03-15 15:14:18 · 6162 阅读 · 0 评论 -
c++内联函数(真TM详细)
1. 内联函数在C++中我们通常定义以下函数来求两个整数的最大值:复制代码代码如下:int max(int a, int b){return a > b ? a : b;}为这么一个小的操作定义一个函数的好处有:① 阅读和理解函数 max 的调用,要比读一条等价的条件表达式并解释它的含义要容易得多② 如果需要做任何修改,修改函数要比找出并修改每一处等价表...转载 2019-03-15 15:37:28 · 492 阅读 · 0 评论 -
c++复习篇(一)--编译链接原理
从.c/.cpp文件到进程中间经过哪些步骤呢?1.预编译(gcc(g++) -o main.i -E main.c 生成.i文件)删除#define,替换宏变量; 处理预处理指令,如#if #endif等; #include,递归展开头文件; 删除注释 添加行号和文件标识,用于调试 #pragma存在2.编译(gcc(g++) -o main.s -S main.i 生...原创 2019-07-18 21:47:34 · 105 阅读 · 0 评论 -
c++复习篇(二)--虚拟地址空间布局
4G虚拟地址空间布局4G的虚拟内存空间:(因为地址总线为32根,所以为4G)其中1G是属于内核空间,另外的3G属于用户空间所有的进程都拥有属于自己的用户空间,但却共享一个内核空间。用户空间:①:128M大小的不可访问区域(保留区)我们通常将申请的临时指针变量初始化时置为NULL,可以防止后续无意使用这个指针出错,因为NULL == 0x0,将其指针指向...原创 2019-07-18 21:57:20 · 136 阅读 · 0 评论 -
c++复习篇(三)--函数调用堆栈
首先介绍函数调用堆栈反汇编语言里面几个术语的意思:栈:对栈的理解是,栈是一段存储空间,供系统或者操作系统使用,对程序员来说一般是不可见的,除非从一开始由程序员自己通过汇编等自己构建栈,栈会由系统管理单元自己申请释放。栈是从高地址向低地址生长的,既栈底在高地址,栈顶低地址。 eax,ebx,ecx,edx寄存器:狭义来说将其统归为存放数据的寄存器; ebp:栈底指针,基地址; esp:栈顶...原创 2019-07-20 00:59:56 · 211 阅读 · 0 评论