
编译
编程小问号
这个作者很懒,什么都没留下…
展开
-
内存管理
1.进程地址空间分布 下图是linux系统中进程地址空间布局,windows进程地址空间布局与此类似。2.栈与函数调用 在经典的操作系统里,栈总是向下增长的。在i386下,栈顶由称为esp(stack pointer)的寄存器进行定位。i386中,一个函数的活动记录用ebp和esp这两个寄存器划定范围。esp始终指向栈的顶部,同时转载 2014-07-15 18:13:10 · 388 阅读 · 0 评论 -
编译过程
由程序生成可执行文件经过了预编译——编译——汇编——链接的过程。其中编译的步骤分为:词法分析、语法分析、语义分析、中间语言生成、目标代码生成及优化(如下图)。 例子:array[index] = (index + 4) * (2 +6)首先是词法分析形成一个个的记号,之后进行语法分析产生语法树。接下来进行语义分析,编译器所能分析的语义是静态语义,所谓转载 2014-07-15 18:00:17 · 480 阅读 · 0 评论 -
静态链接
目标文件中有不同的段,主要有代码段,数据段,bss段(bss段为未初始化的变量预留了空间,记录了各变量所需的大小,但是在文件中是不占用大小的)。在目标文件中与链接有关的就是重定位表(段)。对于每个需要重定位的代码段或数据段都会存在一个重定位表,如果代码段中有针对绝对地址的引用就会存在代码段重定位表——.rel.text,同样相对与数据段的重定位表——.rel.data。转载 2014-07-15 18:09:04 · 363 阅读 · 0 评论 -
动态链接
1.为什么要动态链接 静态链接有两大缺陷:①浪费内存和存储空间。 因为各个可执行文件可能会调用相同的库函数及它们所需要的辅助数据结构。假设有两个目标文件Program1.o和Program2.o,都需要和lib.o进行链接形成可执行文件,当用动态链接的时候内存中只需要存在一份lib.so就可以了。②模块更新困难。 因为当可执行文件中的一个模块转载 2014-07-15 18:09:12 · 511 阅读 · 0 评论 -
运行时错误检查(/RTC)编译选项及实现原理 .
运行时错误检查(/RTC)编译选项及实现原理 作者:童磊(magictong) 环境:VS2005前因后果:debug居然编不过!!!这里准备说4个例子,都是为了说明debug版本对于调试是很重要的,很多问题在调试版本下都会提前暴露出来。 注意:随意调整优化,可调试选项可能会遇到下面的编译错误:Command line error D8016 : '/O2' and转载 2015-04-07 12:44:40 · 993 阅读 · 0 评论 -
CentOS离线安装gcc4.8.2
折腾了一天,功夫不负有心人,终于整出来了,还是很激动的呵呵。废话就不多说了,直接进入正题。首先,在CentOS下安装gcc4.8.2需要先安装GMP,MPFR 和 MPC 三个包。安装包下载地址从http://gcc.gnu.org/下载gcc安装包 gcc-4.8.2.tar.gz从ftp://ftp.gnu.org/gnu/gmp/ 下载GMP安装包 gmp-5.1转载 2015-11-10 16:45:23 · 750 阅读 · 0 评论 -
C++中正确使用PRId64
例子参考高性能流媒体服务器SRS:https://github.com/winlinvip/simple-rtmp-serverSRS中广泛使用PRId64实现32和64位系统通用。c++使用PRID64,需要两步:包含头文件:定义宏:__STDC_FORMAT_MACROS,可以通过编译时加-D__STDC_FORMAT_MACROS,或者在包含文转载 2015-10-29 13:49:39 · 1772 阅读 · 0 评论 -
实例学习gcc+gdb+make
1 小侃GCC在正式使用gcc之前,我们先来侃侃gcc是啥玩意儿?历史现在的GCC是GNU Compiler Collection的简称,既然是Collection,就是指一些工具链的集合。最初的GCC(当时还只有C编译器,GCC还是GNU C Comiler的简写)是由Richard Stallman开发的,Stallman也是GNU工程的首创者,那时还是在198转载 2015-10-28 13:02:30 · 740 阅读 · 0 评论 -
高级语言的编译:链接及装载过程介绍
引言随着越来越多功能强大的高级语言的出现,在服务器计算能力不是瓶颈的条件下,很多同学会选择开发效率高,功能强大的虚拟机支持的高级语言(Java),或者脚本语言(Python,Php)作为实现功能的首选,而不会选择开发效率低,而运行效率高的 C/C++ 作为开发语言。而这些语言一般情况下是运行在虚拟机或者解释器中,而不需要直接跟操作系统直接打交道。虚拟机和解释器相当于为高级语言或者脚转载 2015-12-24 13:22:09 · 978 阅读 · 1 评论