- 博客(11)
- 收藏
- 关注
原创 程序的编译、链接过程(内存布局)
一个C程序经过编译、链接生成可执行文件,一个运行着的可执行文件,我们称之为进程,要了解程序的编译链接,首先要知道进程在内存上的布局,即虚拟地址空间。我们的操作系统(32位)为每个可执行程序分配4G的虚拟空间,其中3G用户空间,1G内核空间。如下为进程的虚拟地址空间.text :代码段.data:数据段(存放已初始化且初始化不为0的静态局部变量和全局变量).bss:数据段(存放未初始化或初始化为0的...
2018-03-31 16:30:47
834
原创 linux下C程序的编译链接
linux下C程序的编译可以分为四个步骤,分别是预处理,编译,汇编和链接。1.预编译:首先预处理完成预替换、去注释、头文件按照路径展开、以及条件编译。建立一个test.c文件。里面写入注释、宏定义、头文件、条件编译。如下图:使用的gcc命令是:gcc -E test.c -o test.i gcc -E的作用是将.c文件转化成.i文件使用vi命令
2017-12-09 17:26:57
3953
原创 C语言中的静态变量和非静态变量
static作为C语言中的关键词,常用来修饰变量和函数。static修饰的变量:1.全局静态变量:在全局变量前面加上关键词static,全局变量就被定义成一个全局静态变量。(1)内存中的位置:静态存储区。(2)作用域:在程序任何地方都是可见的。2.局部静态变量:在局部变量前面加上关键词static,局部变量就被定义成一个局部静态变量。(1)内存中的位置:静态存储区。(全
2017-11-30 15:05:52
22219
原创 linux基本命令
linux基本命令:ls 显示当前目录有哪些文件ls -lh 命令以详情模式(long listing fashion)列出文件夹的内容。ls -a 命令会列出文件夹里的所有内容,包括以"."开头的隐藏文件。pwd 显示当前位置 pwd -P 不会以连接文件的数据显示,而是显示正确的完整路径cd 切换工作目录touch 创建普通文件mkdir 创建文
2017-11-29 22:38:46
234
转载 指针和引用的区别
一、C++中引用和指针的区别指针初始化的时候,可以指向一个地址,也可以为空。引用必须初始化为另一个变量. int ival = 1024; int *pi = &ival; // a pointer int &rval = ival; // a reference二、估计很多人在编写C++程序都或多或少的会用到pointer 和 reference这两种东西,
2017-10-26 16:08:46
262
原创 数组和指针的区别
数组的定义:类型符+数组名+[常量表达式]int ar[n] n的值不能为空,必须为正整数且在编译时需要确定它的值void main(){int ar1[5]={};int ar2[]={1,2,3,4,5};int ar3[5]={1,2,3};}这些定义都是正确的数组下标的引用;sizeof(ar) 表示整个数组的大小所以数
2017-10-21 14:28:42
255
原创 C语言中声明和定义的区别
声明指定了一个变量的标识符,用来描述变量的类型,用于编译器识别变量名所引用的实体。定义是对声明的实现或者是实例化,为变量分配存储空间,还可以给变量赋初始值。变量的声明和定义:int a;//需要建立存储空间 既是定义,也是声明extern int a;//不需要建立存储空间 只是声明,不是定义如果声明有初始化,就被当作定义,即使前面有exter
2017-10-17 12:41:22
3990
原创 goto,break,return及continue的区别
goto:goto语句被称为无条件转移语句,用于从多重循环中跳出。for(...){goto IN}IN: 直接从for循环当中跳出goto语句可以跳转到标号所在的任何地方继续向下执行,但标号必须与goto语句在同一个函数体内,不能跨越函数体。break:break大多用于if语句当中,当满足条件时,便跳出循环。当程序执行到该语句时在循环中表
2017-10-14 15:10:05
517
原创 99乘法表及杨辉三角C代码实现
99乘法表;#includevoid main(){int i=1;int j=1;int s=0;for(i=1;i{for(j=1;j{s=i*j;printf("%d*%d=%d ",i,j,s);}printf("\n");}}杨辉三角:#includevoid main(){int a[11
2017-10-14 13:38:40
636
转载 inline用法详解
(一)inline函数(摘自C++ Primer的第三版) 在函数声明或定义中函数返回类型前加上关键字inline即把min()指定为内联。 inline int min(int first, int secend) {/****/}; inline函数对编译器而言必须是可见的,以便它能够在调用点内展开该函数。与非inline函数不同的是,
2017-10-12 14:14:43
524
原创 寄存器的分类及功能
EAX:累加寄存器,相对于其他寄存器,在运算方面比较常用。EBX:基地址寄存器,作为内存偏移指针使用。ECX:计数器,用于特定的技术。EDX:作为EAX的溢出寄存器,(除法产生的余数)。EIP:存储CPU下次所执行的指令地址(存放指令偏移地址)。ESP:指针的寄存器,用于堆栈操作。EBP:基址指针,指栈的栈底指针。ESI:在内存操作指令中作为“源地址指针”使用。ED
2017-09-21 17:20:32
12024
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人