data和bss区

内存管理中,内存被划分为:系统预留区、代码区、全局变量区、堆和栈。

全局变量区又可划分为:data段和bss段。

data段用于存储已经初始化的全局变量、static变量和文字常量。

bss段用于存储未初始化的全局变量、static变量。

【程序实例1】

#include <iostream>
using namespace std;

int a=3;
int b;

static int c= 6;
static int d;

int main()
{
    cout<<"a="<<a<<endl;
    cout<<"b="<<b<<endl;
    cout<<"c="<<c<<endl;
    cout<<"d="<<d<<endl;

    cout<<"&a="<<&a<<endl;
    cout<<"&b="<<&b<<endl;
    cout<<"&c="<<&c<<endl;
    cout<<"&d="<<&d<<endl;
}

【运行结果】

结果分析:可以看到a和c在地址上是连续的,而b和d相差8个字节。

时间: 2024-10-29 10:46:21

data和bss区的相关文章

text段,data段,bss段,堆和栈

一个程序一般分为3段:text段,data段,bss段 text段:就是放程序代码的,编译时确定,只读, data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写 就是通常所说的静态存储区,赋了初值的全局变量和静态变量存放在这个区域,常量也存放在这个区域 bss段:定义而没有赋初值的全局变量和静态变量,放在这个区域

Linux内存管理(text、rodata、data、bss、stack&amp;heap)

一.各内存区段的介绍 系统内的程序分为程序段和数据段,具体又可细分为一下几个部分: (1)text段-代码段 text段存放程序代码,运行前就已经确定(编译时确定),通常为只读,可以直接在ROM或Flash中执行,无需加载到RAM. 在嵌入式开发中,有时为了特别的需求(例如加速),也可将某个模块搬移到RAM中执行. (2)rodata段(read-only-data)-常量区 rodata段存储常量数据,比如程序中定义为const的全局变量,#define定义的常量,以及诸如"Hello Wor

Linux内核完全注释之编程语言和环境(一)

as86汇编器 1.来源与对于linux的用途 as86来源minix-386开发的intel 8086.80386汇编编译程序和链接程序,他主要为linux创建16位的启动引导扇区程序boot/bootsect.s和实模式下初始设置程序boot/setup.s的二进制执行代码. 2.语法 as86语法是基于minix系统的汇编 语言语法,与gnu as汇编器的语法不兼容 汇编的命令基本格式: as [option] -o objfile srcfile 3.语句 汇编语言程序srcfile是一

PowerPC-Link Command File解析

https://mp.weixin.qq.com/s/CATWma2mv5IPYGtKZLuGDA 以Code Warrior 11生成的flash版本(FLASH.lcf)为例 一. 参考资料 安装完Code Warrior IDE之后,有一个自带的pdf帮助文件,叫做MCU_Power-Architecture_Compiler.pdf,即CodeWarrior Development Studio for Power Architecture Processors Build Tools

bss段和data段的区别

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

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的全局变量的一块内存区域. 数据段属于静态内存分

C之bss、data存储位置区分,使用objdump -t反汇编查看变量所处存储位置

#include <stdio.h> #include <stdlib.h> int wei; //未初始化的全局变量,bss区 int you = 0; //初始化为0的全局变量,bss区 int qing = 1; //初始化非0的全局变量,data区 int main() { static int ai; //未初始化的静态局部变量,bss区 static int ni = 0; //初始化为0的静态局部变量,bss区 static int everyday = 2; //初

stm32中.bss和.data段是在哪里初始化的

https://segmentfault.com/q/1010000004829859/a-1020000004850311 Q: STM32的启动文件startup_stm32f10x_hd.s中的描述是 This module performs: Set the initial SP Set the initial PC == Reset_Handler Set the vector table entries with the exceptions ISR address Configur