c语言杂的笔记

1. 有关对象生存期

对象生存期:保存分配存储空间的时间。

静态生存期:分配存储空间在程序开始执行之前进行,而且保持到程序终止。

在c语言中,所有的函数具有静态生存期,全局变量具有静态生存期,局部变量是否具有静态生存期取决于声明方式。

静态变量只能被初始化一次。

2. switch参数类型不能是实型。

3. 如果要分配存放10个字符的内存,那么最好分配11空间,最后一个放'\o'结束符。

4. c和c++中struct的主要区别是c中的struct不可以含有成员函数,而c++中的struct可以。c++中struct和class的主要区别在于默认的存取权限不同,struct默认为public,而class默认为private。

5. 进程和线程的差别。
   线程是指进程内的一个执行单元,也是进程内的可调度实体.
   与进程的区别:
  (1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
  (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
  (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
  (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。

6.  操作系统中进程调度策略有哪几种:FCFS(先来先服务),优先级,时间片轮转,多级反馈。

7. 死锁的4个必要条件:互斥、请求保持、不可剥夺、环路

8. 实际上,linux内核是不提供多线程机制的。

9. 用户态线程并不一定对应同等数量的内核线程。

10. 线程模型:一对一模型(一个用户线程唯一对应一个内核线程,但反过来不一定。线程切换开销大,但会限制线程数量);多对一模型(改善线程数量,切换开销小);多对多模型。

11. linux下的静态链接库和动态链接库的文件后缀分别为.a和.so

12. c程序编译后的执行语句放在.text段,初始化了的全局变量和局部静态变量放在.data段,未初始化的全局变量和局部静态变量放在.bss段,普通局部变量在运行时放到系统分配给该程序的栈中。

13. 实际上,由于未初始化的全局变量和局部静态变量由于默认初始化为0,所以在文件中只需记录文件的这些变量占据的空间即可,并不要占据实际的内存空间。

14. 我们在shell里执行一个命令的过程:shell进程fork一个新的进程,然后这个进程执行execve去执行我们的命令。

15. 在做linux应用开发时,若程序中用到了多线程,则编译时,需加上 “ -lpthread” 选项来包含线程库。

16. 注意“.”的优先级好像是最高的,看下面这个: ( (struct sockaddr_in)clt_addr ).sin_family ,如果要使clt_addr先转换类型,则必须加括号,不然会先处理"." 。

17. getc(stdin)一次读一个字符,放在缓冲里的回车也会读回来。

18.char cmd=0x88; printf("%s",cmd); 这两句会出现段错误,应该用%d.

19.在c编程时,用到了一个库里的结构体,但如果没有包含定义该结构体的头文件,则会出现类似” **的存储大小未知 “的错误。

20. 注意MDK有的版本的和谐版有些莫名其妙的问题。

21. 编程时,用sizeof时,千万注意传进来的参数的类型,搞错了,就可能会对内存操作越界等。。。

22. 在VC中调用dll,要将dll文件放到debug文件夹下,不然运行时找不到dll,就会报“无法定位xx函数”。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值