笔试题小记

1.系统调用与库函数的区别

答案:



函数库调用
系统调用
在所有的ANSI C编译器版本中,C库函数是相同的 各个操作系统的系统调用是不同的
它调用函数库中的一段程序(或函数) 它调用系统内核的服务
与用户程序相联系 是操作系统的一个入口点
在用户地址空间执行 在内核地址空间执行
它的运行时间属于“用户时间” 它的运行时间属于“系统”时间
属于过程调用,调用开销较小 需要在用户空间和内核上下文环境间切换,开销较大
在C函数库libc中有大约300个函数 在UNIX中大约有90个系统调用
典型的C函数库调用:system fprintf malloc 典型的系统调用:chdir fork write brk
表格来源:http://www.cnblogs.com/yanlingyin/archive/2012/04/23/2466141.html


2.sizeof和strlen的区别
答案:

首先需要说明的是sizeof和strlen都可以求长度,但是却有很大的区别,简单来说可以概括为以下几点:

     1、sizeof是一个关键字,而strlen确实一个函数。

     2、sizeof求的是字节长度,而strlen求的却是实际长度。

        比如int a=1;sizeof(a)==4而strlen(a)=1

     3、sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。

       比如:char a[30]="abcd";

       sizeof(a)=30;而strlen(a)=4;

     4、strlen求的长度是以'\0'结束的。

       比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30;

        同理:char a[30]={'a','b','c'};对于strlen来说也是不定的,而sizeof却是30.



3.C语言程序分配的方式(Linux)

1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。
2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
3、从堆上分配,亦称动态内存分配。程序在运行的时候用malloc或new申请任意多少的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活,但如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,频繁地分配和释放不同大小的堆空间将会产生堆内碎块。
4.C语言常见的内存错误
1 、 内存分配后没有校验,使得内存未成功,却正常使用。 
2 、 内存分配成功后,没有初始化就使用。 
3 、 内存分配成功 , 也进行了初始化 , 可是使用内存时出现了越界 ( 缓冲区溢出 ) 。 这种错 误如果被黑客成功利用,最严重的后果就是整个操作系统被黑客完全控制。 
4 、 内存分配成功后,忘记释放内存,产生内存泄漏。  
5 、 内存分配成功后,也正常释放内存,可是在释放内存后又继续使用。 
6 、 混淆指针和数组



“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值