面经获取 20170515

1.数组长度为什么不能是变量?

答:因为定义数组时,分配空间是需要一个固定的值,来确定你所申请的空间的大小。
如果数组长度个变量,那么数组大小也会改变,在对其使用的时候,就会使用到数组以外的内容,对程序会造成隐患。

2.C语言中,变量的存储类型有几种?

 答:C语言中的存储类型有auto、extern、register、static 四种

auto:只能用来标识局部变量的存储类型,auto标识的变量存储在栈区

extern:用来声明全局变量,如果全局变量未被初始化,那么将被存在BSS区中,且在编译时,自动将其赋值为0.如果已经被初始化,那么就被存在数据区

register:该类型的变量是由内存调入到CPU寄存器后,常驻在CPU的寄存器中,因此访问该类型的变量时,在很大程度上提高了效率。

static:被声明为静态类型的变量,无论是全局还是局部,都存储在数据区,如果静态变量没有被初始化,则自动初始化为0,并且只能够初始化一次。

 

3.内存的分配方式的分配方式有几种?

a. 从静态存储区分配:此时的内存在程序编译的时候已经分配好,并且在程序的整个运行期间都存在。全局变量,static变量等在此存储。

b. 在栈区分配:相关代码执行时创建,执行结束时被自动释放。局部变量在此存储。栈内存分配运算内置于处理器的指令集中,效率高,但容量有限。

c. 在堆区分配:动态分配内存。用new/malloc时开辟,delete/free时释放。生存期由用户指定,灵活。但有内存泄露等问题。

 

 

 4.进程和线程的区别

 线程是指进程内的一个执行单元,也是进程内的可调度实体。与进程的区别:

a. 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。

b. 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行。

c. 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.

d. 系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销

 

 

5 进程间通讯方式有哪些?

1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的亲缘关系通常是指父子进程关系。

2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式。

3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。

4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。

6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。

7)套接字( socket ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

 

 

6.结构体和联合体的区别

对于第2点进行分析,因为union里面仅仅存放一个成员的值,所以union所有成员的值都等于最后进行改动的成员的值。举例:

 

0x4241 转化成十进制  0100 0010  0100 0001 = 66 65  

'a'的ascii为 97 转化为十六进制为 0110 0001 =  61

由于是小端  所以不论存储还是存取 都是先考虑小端 也就是说 读取先从低地址读 存储先存储到低地址。

 

 

 

 

posted @ 2017-05-15 18:41  china_sdd  阅读(103)  评论(0编辑  收藏  举报