自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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关注的人

提示
确定要删除当前文章?
取消 删除