还是几道简答题

来源:互联网 发布:淘宝女人针织衫 编辑:程序博客网 时间:2024/05/16 12:09

  今天和昨天一样,又找了几道简答题,巩固一下前一段时间学习的成果,也对一些名词有了更深入的了解


1.makefile的作用:


makefile文件保存了编译器和连接器的参数选项,还表述了所有源文件之间的关系。
创建程序(make程序)首先读取makefile文件,然后再激活编译器,汇编器,资源编译器
和连接器以便产生最后的输出,最后输出并生成的通常的可执行文件.创建程序利用内
置的推理规则来激活编译器,以便通过对特定cpp文件的编译来产生特定的obj文件.


2.简述Linux进程内存空间分为哪几个段?作用分别是什么?


存放传递参数及环境变量
堆栈(栈) 存放子程序的返回地址、子程序的参数,程序的局部变量
存放进程运行中被动态分配的内存段(malloc)
BSS数据段 存放未初始化的全局变量和静态变量
数据段 存放初始化的全局变量和静态变量      
代码段                          存放程序代码的数据


3.使用linux命令或者shell实现:
  文件words存放英文单词,格式为格式为每行一个英文单词(单词可以重复),统计这个文件中出现次数最多的前10个单词:


cat num.txt | sort | uniq -c | sort -k1 -r | head -10


4.如何查看进程的信息(线程数):


top -h        加上这个选项,top的每一行就不是显示一个进程,而是一个线程。
ps -xH  这样可以查看所有存在的线程,也可以使用grep作进一步的过滤。
ps -mq PID  这样可以看到指定的进程产生的线程数目。


5.简述static关键字的作用?


(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;
(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;
(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;
(4)在类中的static成员变量意味着它为该类的所有实例所共享,也就是说当某个类的实例修改了该静态成员变量,其修改值为该类的其它所有实例所见;
(5)在类中的static成员函数属于整个类所拥有,这个函数不接收this指针,因而只能访问类的static成员变量。


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


  1)函数库提供的函数通常是不需要操作系统的服务.函数是在用户空间内执行的,
除非函数涉及到I/O操作等,一般是不会切到核心态的。系统调用是要求操作
系统为用户提供进程,提供某种服务,通常是涉及系统的硬件资源和一些敏感
的软件资源等。
  2)系统调用的执行效率大多要比函数高,尤其是处理输入输出的函数。
  3)相对于系统调用,C语言的标准备函数库(ANSI C) 具备较高的可移植
性,在不同的系统环境下,只要做很少的修改,通常情况是不需要修改的。


7.sizeof与strlen的区别:


sizeof   获得保证能容纳实现所建立的最大对象的字节大小。
由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小。实际上,用sizeof来
返回类型以及静态分配的对象、结构或数组所占的空间,返回值跟对象、结构、数组所存储的内
容没有关系。
strlen是用来测字符串长度


8.c语言分配内存的方式有哪些?
  c语言中常见的内存错误有哪些?


静态区:保存自动全局变量和 static 变量(包括 static全局和局部变量)。
静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。

栈: 保存局部变量。栈上的内容只在函数的范围内存在,当函数运行结束,这些内容
也会自动被销毁。其特点是效率高,但空间大小有限。

堆: 由malloc系列函数或new操作符分配的内存。其生命周期由free或delete决定。
在没有释放之前一直存在,直到程序结束。其特点是使用灵活,空间比较大,
但容易出错。

1、指针没有指向一块合法的内存
2、没有为结构体指针分配足够内存
3、没有进行函数的入口校验
4、为指针分配的内存太小
5、内存分配成功但未初始化
6、内存越界
7、内存泄露
8、内存已经释放了,但是继续通过指针来使用


9.什么是野指针?如何避免野指针。


定义指针的时候没有对指针进行初始化,
在定义的时候将指针赋为NULL,在指针用完后也要将指针赋为NULL


10.进程间通信方式有哪些?
   以及在什么情况下用什么通信方式?优缺点:


   管道:  管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。
   
   有名管道: 有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。
   
   信号量:   信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进
 程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
 
   消息队列: 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式
 字节流以及缓冲区大小受限等缺点。
 
   信号:     信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
   
   共享内存: 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 
 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号两,配合使用,来实现进程间的同步和通信。
 
   套接字:   套解口也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同及其间的进程通信。
   

0 0
原创粉丝点击