__attribute__((section(”name“)))的一些理解

__attribute__((section(”name“)))是gcc编译器支持的一个编译特性(arm编译器也支持此特性),实现在编译时把某个函数/数据放到name的数据段中。

__attribute__主要用于改变所声明或定义的函数或 数据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回值、pure表明函数除 返回值外,不会通过其它(如全局变量、指针)对函数外部产生任何影响。当然,__attribute__肯定有很多的用法,今天就用到了section部分,所以就只针对这个做一些记录。

提到section,就得说RO RI ZI了,在ARM编译器编译之后,代码被划分为不同的段,RO Section(ReadOnly)中存放代码段和常量,RW Section(ReadWrite)中存放可读写静态变量和全局变量,ZI Section(ZeroInit)是存放在RW段中初始化为0的变量。

于是本文的大体意思就清晰了,__attribute__((section("section_name"))),其作用是将作用的函数或数据放入指定名为"section_name"对应的段中。

原文地址:https://www.cnblogs.com/looner/p/11598685.html

时间: 2024-09-29 05:05:57

__attribute__((section(”name“)))的一些理解的相关文章

gcc/linux内核中likely、unlikely和__attribute__(section(""))属性

查看linux内核源码,你会发现有很多if (likely(""))...及if (unlikely(""))...语句,这些语句其实是编译器的一种优化方式,具体分析如下: likely及unlikely是一个宏定义: #define likely(x)  __builtin_expect(!!(x), 1) #define unlikely(x)  __builtin_expect(!!(x), 0) likely()的 意思是认为这个分支最有可能发生,如if (

mdk keil 指定变量、函数存储位置,使用 Scatter-Loading Description File, __attribute__(("section“))

0. 数据类型说明 主要包括4类: Code (inc. data) ,属于RO,也就是写的函数代码(包括代码中的变量) RO Data , 属于RO,使用const修饰的变量. RW Data, 属于RW,变量. ZI Data,   属于RW,没有初始化的变量. 1. mdk 设置Scatter 文件 默认情况下,片内会有两大存储块IROM(只读存储器RO,用来存常量.代码等),IRAM(读写存储器RW,用来存变量,包括被默认初始化为0的变量),如下图 "Target"选项卡. 来

链接加载文件gcc __attribute__ section

在阅读源代码的过程中,发现一个头文件有引用: /** The address of the first device table entry. */ extern device_t devices[]; /** The address after the last device table entry. */ extern device_t devices_end[]; /** The address of the first "driver_t". */ extern driver_

利用__attribute__((section("name")))构建初始化函数表

在嵌入式学习工作中经常初始化一个硬件就写一个初始化函数,基本都要到主函数中调用进行初始化,main函数都要改变.当利用__attribute__((section("name")))这个属性就可以构造一个初始化函数表,这样每次初始化一个硬件啥的就不用到main函数中去调用初始化函数.式在RTT初始化函数和Linux初始化驱动模块也是类似这样做的. attribute的用法 http://www.keil.com/support/man/docs/armcc/armcc_chr13591

__attribute__特性介绍以及变量和函数特定布局设置

ARM的MDK编译__attribute__介绍:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348bc/Ciafccai.html 比如实现flash特定布局,在ISP和IAP中使用: 1.变量定义或声明const unsigned char IAP[] __attribute__((section("flash.updatable"), used)) 2.链接文件设置:LR_ROM_UPDATE  

#pragma arm section说明

转自:http://blog.csdn.net/humanbeng/article/details/7971570 4.6.3 #pragma arm section [section_sort_list] 此编译指示指定要用于后续函数或对象的节名称.这包括编译器为进行初始化而创建的匿名对象的定义.注意可以将 __attribute__((section(..)))  用于函数或变量以替代 #pragma arm section. [语法]#pragma arm section [ sectio

attribute section的用法

1. gcc的__attribute__编译属性 要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或 数据的特性,它有很多子项,用于改变作用对象的特性.比如对函数,noline将禁止进行内联扩展.noreturn表示没有返回值.pure表明函数除 返回值外,不会通过其它(如全局变量.指针)对函数外部产生任何影响.但这里我们比较感兴趣的是对代码段起作用子项section. __attri

[html5]HTML5中<section>和<article>的区别

一.section元素 从字面理解就是区块.部分的意思,相对于article元素更加广泛,每个区块都可以使用,比如页面里的导航菜单.文章正文.文章的评论等. 1.section元素用于对网站或应用程序中页面上的内容进行分块,section元素的作用是对页面上的内容进行分块,或者说对文章进行分段,: 2.一个section元素通常由内容及其标题组成.通常不推荐为那些没有标题的内容使用section元素, 3.section元素并非一个普通的容器元素:当一个内容需要被直接定义样式或通过脚本定义行为时

嵌入式C语言自我修养 06:U-boot镜像自拷贝分析:section属性

6.1 GNU C 的扩展关键字:attribute GNU C 增加一个 atttribute 关键字用来声明一个函数.变量或类型的特殊属性.声明这个特殊属性有什么用呢?主要用途就是指导编译器在编译程序时进行特定方面的优化或代码检查.比如,我们可以通过使用属性声明指定某个变量的数据边界对齐方式. attribute 的使用非常简单,当我们定义一个函数.变量或类型时,直接在它们名字旁边添加下面的属性声明即可: __atttribute__((ATTRIBUTE)) 这里需要注意的是:attrib