• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
lqcsp
博客园 | 首页 | 新随笔 | 新文章 | 联系 | 订阅 订阅 | 管理

2012年8月15日

编译、链接、装载(2)
摘要: 这篇文章主要讲述链接中的静态链接。 1.对于链接器来说,在链接的过程主要解决的是将几个输入目标文件加工后和合并成一个输出文件这个文件是可执行文件。这时候就产生了问题,对于多个输入目标文件,编译器如何将他们各个段合并到输出文件。也就是说,输出文件的空间如何分配给各个输入文件。 2.链接其采用的是将相似的段合并,就是说将a.o 的 .text与b.o的.text合并等。这里注意.bss段,它在输出文件中并不占用文件空间,但是在装载的时候占用地址空间,所以连接器在合并各个段的时候也将.bss合并,并且分配虚拟的空间。链接器会为目标文件分配地址和空间,这里的地址与空间是两个含义,地址指的是输... 阅读全文
posted @ 2012-08-15 15:27 lqcsp 阅读(350) 评论(0) 推荐(0)
 
 

2012年8月14日

编译、链接、装载
摘要: 在了解一个可执行文件的生成过程中,如果你使用windows中的IDE来完成这一工作,那对于你来说好像是一件非常容易的事情,因为你只需要按下build选项就可一完成编译和链接,然后又一个可执行文件就产生了,然而在中间发生了一系列很复杂的事情你知道吗? 在这篇文章中不举出非常详细的例子来展示如何查看一个程序的各个部分,只是介绍一些可以他有利于你了解你自己写出的程序的一些强大的工具。在进入主题之前先介绍一下程序生成可执行文件的过程,相信绝大数人都有所了解。那就是预编译, 编译, 汇编, 链接。 先大致介绍一下每个部分完成了什么功能: 1、预编译:删除所有#define 并展开所有的宏定... 阅读全文
posted @ 2012-08-14 16:32 lqcsp 阅读(425) 评论(0) 推荐(0)
 
 

2012年8月13日

linux操作杂记
摘要: 1.例如现在有一个可执行的程序 main ,当你想要获得该程序运行的时间的时候 可以用 time ./main 这样在终端上可以打印出程序运行所用的时间。 2.如果想要知道一个程序在运行的时候所链接的系统库可以使用, ldd ./main这样可以输出程序运行时所链接的库。 3.如果想知道一个函数库所导出的函数,可以用 nw xxx.so。nm命令可以列出一个函数库文件中的符号表。它对于静态的函数库和共享的函数库都起作用。对于一个给定的函数库,nm命令可以列出函数库中定义的所有符号,包括每个符号的值和类型。还可以给出在原程序中这个函数(符号)是在多少行定义的,不过这必须要求编译该函数库的时候加“ 阅读全文
posted @ 2012-08-13 16:49 lqcsp 阅读(147) 评论(0) 推荐(0)
 
 

2012年8月11日

高效使用auto_ptr
摘要: 大部分人都听说过auto_ptr指针,但是并非所有人都每天使用它。不使用它是不明智的(可耻的),因为auto_ptr的设计初衷是为了解决C++设计和编码的普遍问题,将它用好可以写出更健壮的代码。本文指出如何正确使用auto_ptr以使程序变得安全,以及如何避开危险,而不是一般使用auto_ptr的恶习所致的创建间歇性和难以诊断的问题。为什么它是一个“自动”指针auto_ptr只是许许多多智能指针中的一种。许多商业库提供许多更强大的智能指针,可以完成更多的事情。从可以管理引用计数到提供更先进的代理服务等。应该把auto_ptr认为是智能指针中的福特Escort[注释]:一个基于简单且通用目的的智 阅读全文
posted @ 2012-08-11 20:17 lqcsp 阅读(157) 评论(0) 推荐(0)
 
 

公告


博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3