zoukankan      html  css  js  c++  java
  • .bss,.data,.text,.rodata

    那天工作时候发现build的时候发现问题,

    问题内容是:.text的空间太小了。

    我一直以为写代码,就真是弄懂代码怎么写,式样书怎么写,或者弄懂代码的问题所在,

    没有想到在build的时候出现问题。结果就是被骂了,连这个你都不懂。

    工作时间查了一下。

    其实基本的概念还是懂的,但是被问到.text放的是什么东西的时候,就不明白。

    其实网上有很多文章。我把我查找到的文章整理一下。不过说实话,国外的文章比较详细。

    国内的文章大多数是告诉,它们代表什么,而不说明由来。

    1,为什么会产生各个文件(.bss,.data,.text,.rodata,堆,栈,常量段)

    我们现在所使用的电脑,代码都是存在内存上的

    (估计有人骂人了,这不是废话吗。早期的电脑,很多都是依靠硬件完成的)

    因为有内存的存储特性(变数卸载rom上就不能更改了),

    所以后来改成放在内存上(flash memory的rom也应该是可以的,但是估计是读写速度慢,所以没有采用)。

    但是如果全都写在内存上,就会很混乱,容易发生问题。

    程序-------> 程序加载器| ----------> Flash memory

                                   | ----------> SDRAM 

                                   | ----------> BBRAM

    为了是对文件读取时候的方便(也有为了电脑成本降低),以便于调试器和链接器进行调试和链接。

    2,系统是怎么识别数据,生成相对应的文件呢

    根据文件生成区块(section)时候内存的特性,来划分

    特性:

    _1,种类:

    SHT_NULL 无效的区块
    SHT_PROGBITS 带有数据(机械语和初始值等)的区块
    SHT_NOBITS 不带有数据
    SHT_RELA 带有可再分配的数据(不依赖与内存的代码)的区块
    SHT_REL
    SHT_SYMTAB 带有符号表的区块

    _2,属性:

    SHF_ALLOC 应该放在内存上的区块
    SHF_WRITE 应该放在可读写区域的区块
    SHF_EXECINSTR 应该放在可执行区域的区块

    _3,归类

    文件 种类 属性
    .bbs SHT_NOBITS SHF_ALLOC + SHF_WRITE
    .data SHT_PROGBITS SHF_ALLOC + SHF_WRITE
    .text SHT_PROGBITS SHF_ALLOC + SHF_EXECINSTR
    .rodata SHT_PROGBITS SHF_ALLOC 
    说明
    主要存放0或者无初始值的全局变量和0或者无初始值的静态局部变量
    主要存放初始值是0以外的全局变量和初始值为0以外的静态局部变量
    机械语跟代码
    字符串,或者定数(const)

    今天先到这里,准备睡觉了。

    还有一些,栈,堆,还没有总结,明天再看看。

  • 相关阅读:
    struct2 学习总结
    c++ 容器(list学习总结)
    java 网络编程(五)----TCP进阶篇上传文本文件
    java 网络编程(四)----UDP进阶篇聊天小程序
    java 网络编程(三)---TCP的基础级示例
    java 网络编程(二)----UDP基础级的示例
    java 网络编程(一)---基础知识和概念了解
    GitHub和git和repo的使用
    android studio不能预览
    关于android studio2.3和android studio3.0
  • 原文地址:https://www.cnblogs.com/a364506875/p/4370344.html
Copyright © 2011-2022 走看看