Liunx_c编程内存详细讲解.ppt_第1页
Liunx_c编程内存详细讲解.ppt_第2页
Liunx_c编程内存详细讲解.ppt_第3页
Liunx_c编程内存详细讲解.ppt_第4页
Liunx_c编程内存详细讲解.ppt_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、,Liunx_c编程详细讲解,只是个人在学习中的一些心得体会,希望拿出来与大家分享,多提宝贵意见,我的邮箱是,谢谢大家合作。,Linux系统编程ANSI文件管理,Main()函数传参 内存管理的基本概念 C程序的内存分配 堆和栈的区别 ANSI C文件管理 文件的基本概念和文件指针 文件和流 文件指针 ANSI C标准文件的I/O操作 缓冲区类型, 打开关闭文件 读写文件 文件流定位 格式化输入输出,Main()函数的传参,有的时候需要在运行时向程序传递信息,我们在用到Linux里的命令时(在Linux里面,一个命令就是一个程序),我们需要对他传递参数,比如ls 我们可以在他的后面加上-l来查

2、看文件。实际上他是将-l这个参数传给了main函数,下面请看main函数的原型: int main (int argc,char *argv); int main(int argc,char *argv,char *envp);,在C 语言中由三个特殊的内嵌变量argc,argv和envp用于接收命令行的变量。他们之间的具体用法如下: 1、argc是命令行参数的个数(包括命令行本身),如./a.out a 那么argc=2; 2、argv是指向参数的各种指针所构成的数组,如ls -l 那么 argv0=ls (即命令本身)的地址,argv1=-l (表示命令的第一个参数)的地址; 3、envp

3、存储进程运行的环境变量信息。,Main函数传参举例 #include #include Int main(int argc,char *argv) if(argc!=2) printf(“you forgot to type your namen”); exit(1); Printf(“hello %sn”,argv1); Return 0; 用gcc进行编译完成后,执行./a.out 观察输出结果是:you forgot to type your name 执行./a.out a 观察输出的结果是: Hello a 这个例子告诉我们什么呢,请大家仔细思考,只要看懂了这个简单的小例子,那么我相

4、信,大家就都会明白main函数传参是怎么回事了,这个时候会发现,他们那么简单,希望大家都动手在自己的机器上练习一下,对代码稍作改动,多传几个不同的参数进去,观察结果,内存管理的基本概念,语言程序结构可执行的程序在存储的时候分为代码区(text)、数据区(data)、未初始化区(bss)三个部分: 代码区:存放Cpu执行的机器指令,通常代码区是可以共享的,而且是只读的 数据区:全局初始化数据区/静态数据区,包括程序中的初始化的全局变量、静态变量和常量 未初始化区:存储的是全局未出世化变量。 C语言程序结构-可执行程序在运行时的五个区域从低地址到高地址依次为: 代码区:顺序指令只会执行一次,如果是

5、要反复执行这个指令,则需要跳转指令,如果进行递归,则要借助栈来实现。 全局初始化数据区/静态数据区:只初始化一次。 未初始化数据区:运行时改变其值。 栈区:由编译器自动分配释放,存放函数的参数值,局部变量的只,(该区对程序员是透明的)。 堆区:用于动态分配内存。 注:1、一个程序在运行过程中,代码是根据流程一次执行的,只需要访问一次,当然跳转和递归偶可能执行多次,而数据一般需要访问多次,因此单独开辟空间以方便访问和节省空间。2、临时数据及需要再次使用的代码在运行的时候放入栈区,生命周期短。3、全局数据和静态数据有可能在整个程序执行的过程中都需要访问,因此单独存储。4、堆上的数据由用户自由分配,

6、以便管理。,内存分配的方式: 静态分配:编译器在处理程序源代码时分配 动态分配:程序在执行的时候调用malloc库函数分配 注:动态分配和静态分配的区别 静态对象是有名字的变量,可以直接对其进行操作;动态对象是没有名字的变量需要通过指针间接地对它进行操作 静态对象的分配与释放由编译器自动处理;动态对象的分配与释放由程序员分配,通过malloc和free两个库函数来完成; 几个常见的内存管理函数的区别: 1、Malloc()用于在堆中申请内存空间,调用free()函数释放申请的内存空间,如果该地址上的内存空间被释放了,那么就不能再去访问被释放的这段内存空间了。该函数的原型是:(void *)ma

7、lloc(size_t size); free(void *); 2、Calloc()函数是malloc()函数的简单封装,该函数可以指定要申请内存空间大小的块数,申请的内存是连续的,申请后,该函数会自动把申请的内存清空,如果申请成功则返回申请的这段内存的首地址,失败则返回空,释放申请的内存空间用free()函数,calloc()函数的原型是:void( *) calloc(size_t nmemb,size_t size) 3、Realloc()函数是用于更改原有的申请的内存空间的大小的函数,该函数,如果能够满足,则返回原指针,如果后面的内存空间的字节不够,就使用堆上的第一个能满足要求的内存空间,并将元数据复制到新的位置,如果内存不足,分配失败,则放回null。从这里我们可以看出,更改已申请内存的大小,首地址有可能改变,返回的是新的内存

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论