Linker Scripts3--MEMORY Command
1.前言
链接器的默认配置允许所有有效内存的分配,你可以使用MEMORY命令来重新定义它
2.MEMORY命令
MEMORY命令描述了一个内存块的位置和大小。你可以用它来描述哪块内存区域可以被链接器使用,哪块内存区域一定要避开。
你可以将段分配到特定的内存区域内,链接器会基于此内存区域设置段地址,如果满了就会有警告,链接器是不会压缩段使之适合放到区域中
一个链接脚本最多只能拥有一个MEMORY命令,然而,你可以定义很多内存块,语法如下:
- MEMORY
 - {
 - name [(attr)] : ORIGIN = origin, LENGTH = len
 - ...
 - }
 
这个name定义了区域的名字。区域的名字对于脚本外部没有意义,它会存储在一个隔离的名字空间里,不会和符号名、文件名或者段名冲突。
在MEMORY命令里的每个内存区域名字不能冲突,不过,你可以给已经存在的内存区域定义别名,see REGION ALIAS (3.4.4 Assign alias names to memory regions)
这个attr字符串是可选项,它指明那些在链接脚本中没有被映射的输入段会被放到哪个特殊的内存区域。如 SECTIONS (3.6 SECTIONS Command)小节
对于没有指定输出段的那些输入段,链接器会创建一个同名的输出段。如果定义了区域属性,链接器可以使用它们为那些创建的输出段指定内存区域
这个attr字符串可以有一下字符组成:
- `R'
 - Read-only section
 - `W'
 - Read/write section
 - `X'
 - Executable section
 - `A'
 - Allocatable section
 - `I'
 - Initialized section
 - `L'
 - Same as `I'
 - `!'
 - Invert the sense of any of the attributes that follow
 
如果一个没有映射的段符合这些属性,除了‘!’属性,它就会被放入此内存区域中。这个‘!’属性保留来给那些任何属性都不符合的那些没有映射的段
origin是一个数字表达式,表示内存区域的起始地址。这个表达式必须由常数来计算得到,不能包含任何符号。关键字ORIGIN还可以缩写为org或者o(但是不能是ORG)
len表示了内存区域的大小。和origin表达式一样,只能使用常数计算。关键字LENGTH可以缩写为len或者l
下面有个例子,我们定义两个可以有效分配的内存区域:一个是起始地址为0大小为256K,另一个的起始地址为‘0x40000000’大小为4M。
MEMORY
{
rom (rx) : ORIGIN = , LENGTH = 256K
ram (!rx) : org = 0x40000000, l = 4M
}
链接器会将每个没有映射的只读或者可执行的段放入‘rom’内存区域中,将其余没有映射的段放入‘ram’的内存区域
一旦你定义了一个内存区域,你可以使用‘>region’输出段属性直接给输出段指明一个内存区域。
比如,有一个‘mem’的内存区域,那么你可以在输出段中使用‘>mem’,see Output Section Region (3.6.8.6 Output Section Region)。
如果没有给这个输出段指明地址,链接器会将它放到该内存区域内下一个有效地址,如果把输入段放入内存区域中太大了,链接器就会报错
通过ORIGIN(memory)和LENGTH(memory)可以访问内存区域的其实地址和大小:
_fstack = ORIGIN(ram) + LENGTH(ram) - ;
参考文献
[1] http://blog.csdn.net/han22647/article/details/64920623
[2] http://blog.csdn.net/huiyuyang_fish/article/details/16884593
Linker Scripts3--MEMORY Command的更多相关文章
- Redis4.0新特性(一)-Memory Command
		
Redis4.0版本增加了很多诱人的新特性,在redis精细化运营管理中都非常有用(猜想和antirez加入redislabs有很大关系):此系列几篇水文主要介绍以下几个新特性的使用和效果. Redi ...
 - Linker scripts之MEMORY
		
1 MEMORY command The MEMORY command describes the location and size of blocks of memory in the targe ...
 - Linker scripts之Intro
		
1 Intro Every link is controlled by a linker script. The main purpose of the linker script is to des ...
 - Sharp Memory LCD (ls013b7dh03)驱动
		
网上找不到什么靠谱的资料,甚至我调好了夏普原厂和代理商还来找我要demo, 哎,苦逼的码农. lcd_main.c #include "ls013b7dh03.h" #inclu ...
 - IAR Build from the command line 环境变量设置
		
http://supp.iar.com/Support/?Note=47884 Technical Note 47884 Build from the command line The alterna ...
 - Linux Command Line learning
		
https://www.codecademy.com/en/courses/learn-the-command-line Background The command line is a text i ...
 - Visual Studio 调试技巧[Command Window & Immediate Window ](Tips)
		
Visual Studio 调试技巧[Command Window & Immediate Window ](Tips) 1. immediate window 定义的一些 alias (// ...
 - Dr.memory
		
Run Dr.memory on visual c++ 2013 Title: Dr. Memory Command: C:\Program Files (x86)\Dr. Memory\bin\dr ...
 - IOS XE-show memory
		
有些时候,我们可能会遇到IOS XE设备的high memory的情况.我们可以使用的命令去查看相关信息. 例如: Router# show version Router# show memory R ...
 - Ubuntu 13.04/12.10安装Oracle 11gR2图文教程(转)
		
Ubuntu 13.04/12.10安装Oracle 11gR2图文教程 原文标题:How to Install Oracle 11G R2 Enterprise Edition Database U ...
 
随机推荐
- Event Recommendation Engine Challenge分步解析第七步
			
一.请知晓 本文是基于: Event Recommendation Engine Challenge分步解析第一步 Event Recommendation Engine Challenge分步解析第 ...
 - shipyard 管理swarm集群(附etcd发现服务方法)
			
docker swarm集群 第一步:安装swarm集群 192.168.132.131----->(manger1,node) 192.168.132.132----->(manger2 ...
 - Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现!
			
Hadoop ha CDH5.15.1-hadoop集群启动后,集群容量不正确,莫慌,这是正常的表现! 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.集群启动顺序 1>. ...
 - java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例
			
本章内容包括3个部分:BufferedOutputStream介绍,BufferedOutputStream源码,以及BufferedOutputStream使用示例. 转载请注明出处:http:// ...
 - Hadoop记录-hdfs转载
			
Hadoop 存档 每个文件均按块存储,每个块的元数据存储在namenode的内存中,因此hadoop存储小文件会非常低效.因为大量的小文件会耗尽namenode中的大部分内存.但注意,存储小文件所需 ...
 - 再次回归 Spark-- 转
			
原文地址 combineByKey 三个参数 val scores = sc.parallelize(Array(("jake",80.0),("jake",9 ...
 - 验证调用HttpServletResponse.getWriter().close()方法是否真的会关闭http连接
			
起因 线上项目突然遭到大量的非法参数攻击,由于历史问题,之前的代码从未对请求参数进行校验. 导致大量请求落到了数据访问层,给应用服务器和数据库都带来了很大压力. 针对这个问题,只能对请求真正到Cont ...
 - 二十二、Linux 进程与信号---进程创建
			
22.1 fork 和 vfork 函数 22.1.1 函数说明 #include <unistd.h> #include <sys/types.h> pid_t fork( ...
 - 【codeforces 870F】Paths
			
Description You are given a positive integer n. Let's build a graph on vertices 1, 2, ..., n in such ...
 - flex中使用white-space
			
在微信小程序开发中,view设置为flex布局,但是flex的flex-wrap属性不起作用,如果起作用的话,默认值即no-wrap不换行.如果要测试view-scroll并且scroll-x 就没法 ...