函数代码://demo.c

#include<stdio.h>
#include<stdlib.h> int global1 = , global2 = , global3 = ; void function(void)
{
int local4 = , local5 = , local6 = ;
static int static4 = , static5 = , static6 = ;
int *p2 = (int*)malloc(sizeof(int)); printf("子函数 局部变量 : \n");
printf("local4 : %p \n", &local4);
printf("local5 : %p \n", &local5);
printf("local6 : %p \n", &local6); printf("子函数 指针变量 : \n");
printf("p2 : %p \n", p2); printf("全局变量 : \n");
printf("global1 : %p \n", &global1);
printf("global2 : %p \n", &global2);
printf("global3 : %p \n", &global3); printf("子函数 静态变量 : \n");
printf("static4 : %p \n", &static4);
printf("static5 : %p \n", &static5);
printf("static6 : %p \n", &static6); printf("子函数地址 : \n");
printf("function : %p \n", function);
} int demo_main(int argc, char **argv)
{
int local1 = , local2 = , local3 = ;
static int static1 = , static2 = , static3 = ;
int *p1 = (int*)malloc(sizeof(int));
const int const1 = ;
char *char_p = "char"; printf("主函数 局部变量 : \n");
printf("local1 : %p \n", &local1);
printf("local2 : %p \n", &local2);
printf("local3 : %p \n", &local3);
printf("const1 : %p \n", &const1); printf("主函数 指针变量 : \n");
printf("p1 : %p \n", p1); printf("全局变量 : \n");
printf("global1 : %p \n", &global1);
printf("global2 : %p \n", &global2);
printf("global3 : %p \n", &global3); printf("主函数 静态变量 : \n");
printf("static1 : %p \n", &static1);
printf("static2 : %p \n", &static2);
printf("static3 : %p \n", &static3); printf("字符串常量 : \n");
printf("char_p : %p \n", char_p); printf("主函数地址 : \n");
printf("main : %p \n", demo_main); printf("= = = = = = = = = = = = = = = \n"); function(); return ;
}

函数打印情况,并结合sct文件、init.s分析:

;;init.s
;The location of stacks
UserStack EQU (_STACK_BASEADDRESS-0x3800) ;0x33ff4800 ~ 0x33ff5800
SVCStack EQU (_STACK_BASEADDRESS-0x2800) ;0x33ff5800 ~
UndefStack EQU (_STACK_BASEADDRESS-0x2400) ;0x33ff5c00 ~
AbortStack EQU (_STACK_BASEADDRESS-0x2000) ;0x33ff6000 ~
IRQStack EQU (_STACK_BASEADDRESS-0x1000) ;0x33ff7000 ~
FIQStack EQU (_STACK_BASEADDRESS-0x0) ;0x33ff8000 ~
主函数 局部变量 :         //运行时,UserStack栈中,map文件里面没有
local1 : 33ff56e4
local2 : 33ff56e0
local3 : 33ff56dc
const1 : 33ff56d8
主函数 malloc指针变量 :   //运行时,堆中,map文件里面没有
p1 :       //_init_alloc(0x37000000,0x38000000-8); 
全局变量 : //Data demo.o(.data) [rw]
global1 : 322000a8
global2 : 322000ac
global3 : 322000b0
主函数 静态变量 : //Data demo.o(.data) [rw]
static1 : 322000c0
static2 : 322000c4
static3 : 322000c8
字符串常量 : //Code demo.o(.text) [ro]
char_p : 32013b28
主函数地址 : //ARM Code demo.o(.text) [ro]
demo_main : 32013a10
= = = = = = = = = = = = = = =
子函数 局部变量 : //运行时,map文件里面没有
local4 : 33ff56c8
local5 : 33ff56c4
local6 : 33ff56c0
子函数 指针变量 : //运行时,map文件里面没有
p2 :
全局变量 : //Data demo.o(.data) [rw]
global1 : 322000a8
global2 : 322000ac
global3 : 322000b0
子函数 静态变量 : //Data demo.o(.data) [rw]
static4 : 322000b4
static5 : 322000b8
static6 : 322000bc
子函数地址 : //ARM Code demo.o(.text) [ro]
function : 3201381c

sct 、 map文件分析:

; *************************************************************
; *** Scatter-Loading Description File generated by uVision ***
; ************************************************************* LR_ROM1 0x32000000 0x00200000 { ; load region size_region
ER_ROM1 0x32000000 0x00200000 { ; load address = execution address
*.o (RESET, +First)
*(InRoot$$Sections)
.ANY (+RO)
} ;const data[ro] and code
;Symbol Name Ov Type Size Object(Section)
;RESET Section init.o(RESET)
;IsrIRQ ARM Code init.o(RESET)
;static U16 ReadStatus ARM Code nand.o(.text)
;static void WriteRawRCBySPI1 ARM Code nand.o(.text)
;static const U8 exchang_right Data des.o(.constdata)
;__ENTRY ARM Code init.o(RESET)
;void DelayMs ARM Code common.o(.text) RW_RAM1 0x32200000 0x04000000 { ; RW data 0x3220002c
.ANY (+RW +
ZI)//可更改的变量
} ;rw data + bss
;static char IcCardSnrFound[] Data execmd.o(.data)
;static U8 s_Buf[][] Data nfblack.o(.bss)
;int grDebugCom Data common.o(.data)
;u8 downloadbuf[*] Data fireupdate.o(.bss)
;struct USB_DEVICE_DESCRIPTOR descDev Data usbsetup.o(.bss) RW_IRAM1 0x40000000 0x00001000 {
.ANY (+RW +ZI)
}
}
 
bss段,代码段及数据段的区别[1]:
bss和data的区别:
全局的未初始化变量存在于.bss段中,具体体现为一个占位符;
全局的已初始化变量存于.data段中; .bss是不占用.exe文件空间的,其内容由操作系统初始化(清零);
而.data却需要占用,其内容由程序初始化。 若这样定义一个全局变量:int g_inBss[] ;
则它在.bss段,这里占用占位符的空间。 若这样定义一个全局变量:int g_inData[] ={,,,,,,,,};
则它在.data段,程序占用数组全部大小的空间。 bss和data的联系:
都在rw区域;
bss段在运行起来成为进程之后,占的空间大小和data就相同了。
代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读
(某些架构也允许代码段为可写,即允许修改程序)。
在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。
代码段是存放了程序代码的数据,假如机器 中有数个进程运行相同的一个程序,那么它们就可以使用同一个代码段。
 

参考:

1、  bss段,代码段及数据段的区别

http://blog.163.com/starjj_embeded/blog/static/2045000512012213113440344/

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

http://www.cppblog.com/prayer/archive/2009/08/17/93594.html

代码中函数、变量、常量 / bss段、data段、text段 /sct文件、.map文件的关系[实例分析arm代码(mdk)]的更多相关文章

  1. 输出JS代码中的变量内容

    一. 输出JS代码中的变量内容 1. 可以直接以提示框的形式输出 alert("输出的内容"); 2. 可以输出到网页的某个位置 a. 在显示输出的位置放一个标签 <a id ...

  2. create-react-app 中设置反向代理、项目打包资源引入路径设置及 map 文件

    1.配置反向代理 (1)porxy 配置一个代理 修改package.json文件 "proxy":"http://teng.com/website/web", ...

  3. C语言基础知识点整理(函数/变量/常量/指针/数组/结构体)

    函数 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ...

  4. C++中函数变量布局小结

    把布局作为一种信仰(Layout as Religion).                                                                       ...

  5. 用闭包解决 js 循环中函数变量暂存问题

    需求:有一个数组,根据数组的值渲染对应的数字div,单击对应的div 在控制台打印对应的数字.如点击1,控制台打印1. 问题: 不管点击哪个值 打出来都是4 代码如下 <!DOCTYPE htm ...

  6. IDEA中的替换功能(替换代码中的变量名很好用哦)

    刚刚上班不久,这两天正在研究公司项目里面的代码,今天用阿里的插件扫描了一下代码,发现代码中有很多变量的命名,没有遵循驼峰式的命名规则.一开始我一个一个的修改这些变量名,后来无意中用了一下Ctrl+F( ...

  7. bss、data、text、heap(堆)与stack(栈)

    bss段: bss段(bss segment)通常是指用来存放程序中未初始化的全局变量和静态变量(static)的一块内存区域. bss是英文Block Started by Symbol的简称. b ...

  8. 下列java代码中的变量a、b、c分别在内存的______存储区存放。

    class A{ private String a = "aa"; public boolean methodB(){ String b = "sb"; fin ...

  9. python 自动获取(打印)代码中的变量的名字字串

    方法一: import inspectimport re def varname(p): for line in inspect.getframeinfo(inspect.currentframe() ...

随机推荐

  1. 5.7.1.2 eval() 方法

    现在我们介绍最后一个方法,这大概是ECMAScript语言中最强大的一个方法:eval().eval()方法就想一个完整的ECMAScript解析器,它只接受一个参数,即要执行的ECMAScript( ...

  2. javascriptDOM编程艺术_学习笔记_知识点 DOM

    第三章   getElementById    返回一个与那个有着给定id属性值的元素节点对应的对象. document.getElementById(id) 下面一个例子: document.get ...

  3. codeforces 626E. Simple Skewness 三分

    题目链接 给n个数, 让你去掉一些数, 使得剩下的数的平均值-中位数的差值最大. 先将数组排序, 然后枚举每一个数作为中位数的情况, 对于每个枚举的数, 三分它的左右区间长度找到一个平均值最大的情况, ...

  4. appium获取app应用的package和 activity。---新手总结(大牛勿喷,新手互相交流)

    从网上搜索的方法: 如下: 1.查看源码 2.日志法a.启动待测apkb.开启日志输出:adb logcat>D:/log.txtc.关闭日志输出:ctrl+cd.查看日志直接搜索 :Displ ...

  5. selenium 学习笔记 ---新手学习记录(4) 问题总结(java)-autoit3脚本使用

    1.安装autoit3 下载地址:点我下载 (提取码:9633) 提取码 下载完成后,一直下一步即可 2.上传头像使用脚本 代码如下: ControlFocus("打开",&quo ...

  6. 数据库导出到excel

    项目结构同上一篇 泛型通用的写法 ExportExcel.java package excel; import java.io.OutputStream; import java.lang.refle ...

  7. .NET Core 安装

    Visual Studio 2015 和 .NET Core 安装 安装 Visual Studio 和 .NET Core 1.安装 Visual Studio Community 2015,选择 ...

  8. Qt实现16进制unicode转utf-8以及国际音标编码问题

    由于项目需要,需要对网络资源进行解码.遇到编码问题.研究了下基本编码原理.于是有了下面两个通用代码 1. 16进制unicode转换为utf-8中文显示 QString unicodeToUtf_8( ...

  9. Nginx工作原理和优化、漏洞(转)

    查看安装了哪些模块命令: [root@RG-PowerCache-X xcache]# nginx/sbin/nginx -Vnginx version: nginx/1.2.3built by gc ...

  10. 记载abp中Dbcontext的疑问

    q:abp中httpcontext如何在一次请求中保证获取的是相同的实例. 大牛的原话: LifestylePerWebRequest does not works good with async. ...