• c++随笔之编译器编译原理


    /*

    C++编译器原理:
    1)首先明白声明与定义是两个不同的概念
    extern int i;是声明,int i;是定义
    函数就更简单了
    2)编译分为:
    预编译:将宏替换,include等代码拷贝过来
    编译:将代码转化为机怨言
    链接:一般会对每个cpp文件生成.obj文件。下面会详细讲解
    1>每个obj文件至少也该包含三个表:未知符号表,导出符号表,地址重定义表
    未知符号表包含了每个cpp文件自身obj找不到函数或变量的定义的时候,该函数,变量的声明就被导入到未知符号表。
    导出符号表包含了每个cpp文件变量,函数的定义,分为外部链接符号与内部链接符号。
    地址重定向:将每个obj向exe文件地址进行编译,以确保外部链接的唯一性
    2>连接器的工作过程:
    首先他会将所有obj文件进行地址偏移,然后去访问所有obj文件的未知符号表,通过遍历导出符号表将未知符号表的符号的地址补充上
    最后生成exe文件
    3)每一个编译单元是独立的,不用担心声明为重复的问题,你应该担心定义是否会重复定义
    4)一般的外部链接与内部链接符号的分类:
    由外部链接的符号:默认的全局变量函数,类的成员变量函数。静态内部成员函数之所以在cpp文件定义就是担心他的重复定义问题,因为他是外部连接,被include多次,自然就会报外部符合重复冲突错误
    内部链接的符号:static,const修饰的全局变量都是内部链接。
    */

  • 相关阅读:
    Html5页面返回机制解决方案
    Linux(Fedora)下NodeJs升级最新版本(制定版本)
    fedora23开发环境搭建手册
    fedora安装sublime text教程
    实现斐波那契数列之es5、es6
    选择城市下拉框中选择框右对齐,文本右对齐问题
    前端笔记(二)
    前端基础笔记(一)
    解决点击输入框弹出软键盘导致弹窗失效的问题
    angularJS之ng-bind与ng-bind-template的区别
  • 原文地址:https://www.cnblogs.com/enjoyall/p/6026163.html
Copyright © 2020-2023  润新知