12.bss段的初始化

在C代码:有初始化全局的数据段,局部的栈,malloc部分的堆,未初始化的全局的bss段。

?

?

从上面的编译的信息知道:

Bss段的起始地址:0001052c

Bss段的结束地址:00010534

我们的hello变量的地址:00010530是落在bss段里的地址的。所以是存在bss段的。这就是未初始化的全局变量存放在bss段。

接下来我们就来初始化bss段:

在我们的链接器脚本,有我们bss段的起始地址和结束地址:

start.S的代码实现:

Make后测试。

时间: 2024-11-03 22:52:12

12.bss段的初始化的相关文章

[国嵌攻略][044][初始化Bss段]

BSS段的作用 1.变量存储的空间 初始化的全局变量:数据段 未初始化的全局变量:BSS段 局部变量:栈 动态分配变量:堆 2.为什么要对BSS段初始化 未初始化的全局变量在使用时才被赋值,未了避免在使用时忘记赋值,导致使用随机值.由系统工程师在系统启动时,把BBS清零. 初始化BSS段 找到BSS段起始地址和结束地址向其中填零,BSS段地址记录在链接器脚本中 /* *名称:init_bss *功能:初始化BSS段 */ init_bss: ldr r1, =bss_start ldr r2,

Text段、Data段和BSS段

不同的compiler在编译的过程中对于存储的分配可能略有不同,但基本结构大致相同. 大体上可分为三段:Text段.Data段和BSS段. text段用于存放代码,通常情况下在内存中被映射为只读,但data和bss是可写的. 数据存放通常分成如下几个部分: 1.栈:由编译器自动分配,保存函数的局部变量和参数. 2.堆:一般由程序员动态分配释放, 若程序员不释放,程序结束时可能由OS回收 ,例如malloc.它不同与数据结构中的堆,它更类似于链表. 3.全局区:全局变量和静态变量的存储是放在一块的

[转] bss段、data段、text段

1.前言 本文主要分编译时和运行时分别对 对data段 bss段 text段 堆 栈作一简要说明 2. 程序编译时概念说明 2.1 bss段 bss段(bss segment)通常是指用来存放程序中未初始化(或初始化为0)的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. 2.2 data: 数据段(data segment)通常是指用来存放程序中已初始化(非零)的非const的全局变量的一块内存区域. 数据段属于静态内存分

BSS段、数据段、代码段、堆与栈

BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. BSS是英文Block Started by Symbol的简称.BSS段属于静态内存分配. 数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. 代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区 域.这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读

程序中的bss段,data段,代码段,堆,栈

程序中的bss段,data段,代码段(.text),堆(heap),栈(stack) .bss段:程序中未初始化的和已经初始化为0的全局变量和已经初始化为0的静态局部变量(static) .data段:程序中已经初始化的非零的全局变量和已经初始化的非零的静态局部变量(static) 代码段:用来存放代码的地方(.text段),不可修改,存放在只读区域内. 堆:程序员自己申请的内存区域,也就是用malloc()函数申请的内存区域,用free()函数来释放的区域. 栈:存放局部变量的区域,函数中的局

bss段和data段的区别

一般情况下,一个程序本质上都是由 bss段.data段.text段三个组成的——本概念是当前的计算机程序设计中是很重要的一个基本概念.而且在嵌入式系统的设计中也非常重要,牵涉到嵌入式系统运行时的内存大小分配,存储单元占用空间大小的问题. 在采用段式内存管理的架构中(比如intel的80x86系统),bss段(Block Started by Symbol segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域,一般在初始化时bss 段部分将会清零(bss段属于静态内存分配,即程序

可执行程序包括BSS段、数据段、代码段

可执行程序包括BSS段.数据段.代码段(也称文本段). 一.BSS BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域.特点是:可读写的,在程序执行之前BSS段会自动清0.所以,未初始的全局变量在程序执行之前已经成0了. 注意和数据段的区别,BSS存放的是未初始化的全局变量和静态变量,数据段存放的是初始化后的全局变量和静态变量. UNIX下可使用size命令查看可执行文件的段大小信息.如size a.out. 二.数据段 在采

(转)Linux下数据段的区别(数据段、代码段、堆栈段、BSS段)

进程(执行的程序)会占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等.不过进程对这些内存的管理方式因内存用途 不一而不尽相同,有些内存是事先静态分配和统一回收的,而有些却是按需要动态分配和回收的.对任何一个普通进程来讲,它都会涉及到5种不同的数据段. Linux进程的五个段 下面我们来简单归纳一下进程对应的内存空间中所包含的5种不同的数据区都是干什么的. BSS段:BSS段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域.BS

bss段、data段、text段、堆(heap) 和 栈(stack)

bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量的一块内存区域. bss是英文Block Started by Symbol的简称. bss段属于静态内存分配. data段: 数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域. 数据段属于静态内存分配. text段: 代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域. 这部分区域的大小在程序运行前就已经确定,并且内存