Chinaunix首页 | 论坛 | 博客
  • 博客访问: 641908
  • 博文数量: 99
  • 博客积分: 4335
  • 博客等级: 中校
  • 技术积分: 931
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-26 14:11
文章分类

全部博文(99)

文章存档

2012年(14)

2011年(17)

2010年(14)

2009年(54)

分类: C/C++

2009-07-27 13:12:24

   今天又被问到这个问题,开始以为很简单,头文件就是.h文件,在预处理阶段把一些函数声明加到程序里,库就是一些.o文件的包,在链接时用到。

   在运行的时候呢?如果编译完,把头文件删掉,还能不能运行?把库删掉呢?

   其实很简单,程序已经被编译成可执行文件,源程序和头文件已经不需要了,而如果是静态库,删掉也无所谓,因为静态库会被添加到和它连接的每个程序中,程序运行时,都会被加载到内存中,因此静态库会消耗更多的内存空间。动态库也叫共享库,只会把生成可执行文件需要的函数引用表加入,在运行时,才把函数代码拷到内存中,这样就使可执行文件比较小,节省磁盘空间(操作系统使用虚拟内存,使得一份共享库驻留在内存中被多个程序使用)。共享库还有个优点:若库本身被更新,不需要重新编译与它连接的源程序。

   还有,刚刚想了想,头文件只是包含函数的声明,库文件只是对函数进行解析,具体的函数定义可能在本文件中,也可能在其他的文件中。不知道怎么理解对不对?希望高手给个更好的解释,哈哈

 

 

 

阅读(686) | 评论(0) | 转发(0) |
0

上一篇:浅谈C内存分配

下一篇:GDB 入门介绍

给主人留下些什么吧!~~