Linux操作系统常见面试题(持续更新)

1.熟悉命令netstat tcpdump ipcs ipcrm

netstat:检查网络状态,tcpdump:截获数据包,ipcs:检查共享内存,ipcrm:解除共享内存

2.共享内存段被映射进进程空间之后,存在于进程空间的什么位置?共享内存段最大限制是多少?

将一块内存映射到两个或者多个进程地址空间。通过指针访问该共享内存区。一般通过mmap(提供了一种机制,让用户程序直接访问设备内存)将文件映射到进程地址共享区。

存在于进程数据段,最大限制是0x2000000Byte(32MB)

3.进程内存空间分布情况

一个进程的空间分布
程序段:程序段为程序代码在内存中的映射.一个程序可以在内存中多有个副本
初始化过的数据:在程序运行值初已经对变量进行初始化的
未初始化过的数据:在程序运行初未对变量进行初始化的数据
栈(stack):存储局部,临时变量,在程序块开始时自动分配内存,结束时自动释放内存.存储函数的返回指针.
堆(heap):存储动态内存分配,需要程序员手工分配,手工释放.

4.ELF是什么?其大小与程序中全局变量的是否初始化有什么关系(注意未初始化的数据放在bss段)

可执行连接格式(用于二进制文件、可执行文件、目标代码、共享库和核心转储格式文件)。.bss段是放未初始化或者初始化为0的全局变量;.data段是存放初始了且不为零的全局变量。bss段中的值全部赋为了0。程序中就不存在没有初始化的全局变量了,你不初始化,bss段也会帮你初始化为0。

5.动态链接和静态链接的区别?

动态链接是只建立一个引用的接口,而真正的代码和数据存放在另外的可执行模块中,在可执行文件运行时再装入;而静态链接是把所有的代码和数据都复制到本模块中,运行时就不再需要库了

6.32位系统一个进程最多有多少堆内存

32位意味着4G的寻址空间,Linux把它分为两部分:最高的1G(虚拟地址从0xC0000000到0xffffffff)用做内核本身,成为“系统空间”,而较低的3G字节(从0x00000000到0xbffffff)用作各进程的“用户空间”。每个进程可以使用的用户空间是3G。虽然各个进程拥有其自己的3G用户空间,系统空间却由所有的进程共享。从具体进程的角度看,则每个进程都拥有4G的虚拟空间,较低的3G为自己的用户空间,最高的1G为所有进程以及内核共享的系统空间。实际上有人做过测试也就2G左右。

7.写一个c程序辨别系统是64位 or 32位

void* number = 0; printf("%d\n",sizeof(&number));

输出8就是64位 输出4就是32位的 根据逻辑地址判断的

8.写一个c程序辨别系统是大端or小端字节序


                
  • 0
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值