随笔 - 8  文章 - 0  评论 - 0  阅读 - 8085
  2015年7月8日

Text:代码段。存放程序的全部代码(指令),来源于二进制可执行文件中的代码部分,在编译的时候就已经放置到二进制文件中。

Initialized data(简称data段)和uninitialized data(简称bss段)组成了数据段。其中data段存放的是已初始化全局变量和已初始化static局部变量,来源于二进制可执行文件中的数据部分,这部分在编译的时候就已经放置到二进制文件中;bss段存放的是未初始化全局变量和未初始化static局部变量,其内容不来源于二进制可执行文件中的数据部分(也就是说:二进制可执行文件中的数据部分没有未初始化全局变量和未初始化static局部变量)。根据C语言标准规定,它们的初始值必须为0,因此bss段存放的全是0.将bss段清0的工作是由系统在加载二进制文件后,开始执行程序前完成的,系统执行这个清0操作是有内核的一段代码完成的(exec系统调用)。至于exec从内存什么地方开始清0-以及要清0多少空间,则是由记录在二进制可执行文件中的信息决定的(即二进制文件中记录了text、data、bss段的大小)

Malloc是从heap中分配空间的。

Stack(栈)存放的是动态局部变量。即当调用子函数时,系统会从栈中分配空间给该子函数的动态局部变量(注意:此时栈向内存低地址延伸);当子函数返回时,系统的栈会向内存高地址延伸,这相当于释放子函数的动态局部变量的内存空间。假设main函数在调用子函数A后立即调用子函数B,那么子函数B的动态局部变量就会覆盖原来子函数A的动态局部变量的存储空间,这就是子函数不能互相访问对方动态局部变量的根本物理原因。

内存的最高端存放的是命令行参数和环境变量,将命令行参数和环境变量放到指定位置这个操作是有OS的一段代码(exec系统调用)在加载二进制文件到内存后,开始运行程序前完成的。

 

摘自《Linux下C语言应用编程》

 

posted @ 2015-07-08 10:32 weekman 阅读(321) 评论(0) 推荐(0)
  2015年5月7日
摘要: 一、使用ftrace:内核版本较高的Linux系统已默认有ftrace功能。1、相关设置首先获取root权限:Su 输入密码再切换目录:cd /sys/kernel/debug/ftracing设置追踪器:echo function/function_graph >current_tracer设置函... 阅读全文
posted @ 2015-05-07 22:33 weekman 阅读(239) 评论(0) 推荐(0)
  2015年5月1日
摘要: ;汇编指令,表示程序将被汇编成能在Intel386系列及以上的计算机上运行.386;model flat 表明程序使用保护模式,即程序将使用32位地址,;c表示改程序可以与c或c++程序进行连接,需要运行在visual C++环境中.model flat,c;.stack以十六进制表示堆栈大小,下面... 阅读全文
posted @ 2015-05-01 22:54 weekman 阅读(346) 评论(0) 推荐(0)
  2015年4月27日
摘要: 1、将MASM32下载并安装到根目录(得到include和lib文件夹),官网即可下载,有64位版本2、配置vs2010 (1)添加项目 a、新建空白解决方案 b、添加空项目 c、项目属性->生成自定义->勾上masm d、添加文件,可以选择cpp,但是把后缀名改为.asm (2)设置属性 ... 阅读全文
posted @ 2015-04-27 13:58 weekman 阅读(1664) 评论(0) 推荐(0)
  2015年3月8日
摘要: //用于拷贝文件#include #include#include int main(){ FILE *fp_from=NULL; //定义文件指针 FILE *fp_to=NULL; int len; //获取文件长度 char *ch=NULL; //缓存buffer if ... 阅读全文
posted @ 2015-03-08 09:36 weekman 阅读(4850) 评论(0) 推荐(0)
  2015年3月7日
摘要: #include #include #include int main(){ int len; char *ch=NULL; FILE *pfile=fopen("a.txt","r+"); //不用新建a.txt,下一个语句自动新建 fwrite("hello,world",1,strlen("h... 阅读全文
posted @ 2015-03-07 22:26 weekman 阅读(106) 评论(0) 推荐(0)
  2015年1月26日
摘要: from:《linux操作系统下c语言编程入门》及相关网上资料A:基础知识1.常用编译:gcc -o hello hello.c-o表示输出可执行文件名-c表示只要求编译器输出目标代码,而不是可执行文件-g表示在编译的时候要求编译器提供以后对程序进行调试的信息###注意有printf()这类函数时要... 阅读全文
posted @ 2015-01-26 11:01 weekman 阅读(281) 评论(0) 推荐(0)
摘要: 4.3.4 调度策略的活动想象下面这样一个系统,他拥有两个可运行的进程:一个文字编辑程序和一个视频编码程序。文字编辑程序显然是I/O消耗型的,因为它大部分时间都在等待用户的键盘输入(无论用户的输入速度有多快,都不可能赶上处理的速度)。用户总是希望按下键系统就能马上响应。相反,视频编码程序是处理器消耗... 阅读全文
posted @ 2015-01-26 11:00 weekman 阅读(278) 评论(0) 推荐(0)
< 2025年7月 >
29 30 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 1 2
3 4 5 6 7 8 9

点击右上角即可分享
微信分享提示