linux gcc attribute

_attribute__((error("message"))) Declare that calling the marked function is an error.
__attribute__((warning("message"))) Declare that calling the marked function is suspect and should emit a warning.
__attribute__((deprecated)) Declare that using the marked function, type, or variable is deprecated and will emit a warning.
__attribute__((const)) Declare that the marked function is a pure function, only examining its arguments and returning a value without examining or changing anything else.
__attribute__((pure)) Declare that the marked function is a pure function, with no side effects (although it may examine global state).
__attribute__((nonnull(n1, ...))) Declare that the specified arguments (one-based) (or all arguments if no indexes are listed) should only be passed nonnull pointers.
__attribute__((noreturn)) Declare that the marked function will not return (although it may throw).
__attribute__((hot)) Hint that the marked function is "hot" and should be optimized more aggresively and/or placed near other "hot" functions (for cache locality).
__attribute__((cold)) Hint that the marked function is "cold" and should be optimized for size, predicted as unlikely for branch prediction, and/or placed near other "cold" functions (so other functions can have improved cache locality).
__attribute__((warn_unused_result)) Declare that the function‘s return value is important and should be warned about if ignored.

参考:http://blog.csdn.net/lcw_202/article/details/6226217

__attribute__((hot))|__attribute__((cold))

__attribute__((hot))
函数前面使用这个扩展,表示该函数会被经常调用到,在编译链接时要对其优化,或说是将它和其他同样热(hot)的函数放到一块,这样有利于缓存的存取。

__attribute__((cold))

Hint that the marked function is "cold" and should be optimized for size, predicted as unlikely for branch prediction, and/or placed near other "cold" functions (so other functions can have improved cache locality).
函数前面使用这个扩展,表示该函数比较冷门,这样在分支预测机制里就不会对该函数进行预取,或说是将它和其他同样冷门(cold)的函数放到一块,这样它就很可能不会被放到缓存中来,而让更热门的指令放到缓存中。

分支预测:

在 http://www.groad.net/bbs/read.php?tid-1455.html 这里介绍了一级缓存、二级缓存以及指令预取的概念。虽然实现多个级别的缓存是帮助加快程序逻辑的执行速度的一个途径,但实际上仍然没有解决“跳转的”程序问题。如果程序采用很多不同的逻辑分支,那么使不同级别的缓存跟上分支的跳转几乎是不可能的事情,结果反而会造成在最后时刻有更多的从内存中访问指令码和数据元素的情况。

为了解决这个问题,IA-32 平台的处理器提出了 分支预测(branch prediction)的概念。

分支预测使用专门的算法试图预测接下来在程序分支中需要哪些指令码。

专门统计学算法和分析被引入用来确定指令码中最可能的执行路径。这条路径上的指令码会被预取并且加载到缓存中。

3 种分支预测技术(Pentium-4):

      深度分支预测
      动态数据流分析
      推理性执行

深度分支预测使处理器能够试图越过程序中的多个分支对指令进行解码。这里同样使用了统计学的算法来预测程序在分支中最可能的执行路径。虽然这种技术有帮助,但是不是完全没错误,完全解决了跳转的问题。

动态数据流分析对处理器中的数据流进行统计学实时分析。被预测为程序流程必须经过的,但是指令指针还没有达到的指令被传递给乱序执行引擎。另外,在处理器等待与令一条指令相关的数据时,任何可以执行的指令都会被处理。

推理性执行处理器能够确定指令码分支中哪些不是立即就需要执行的,哪些“远距离”指令码以后有可能需要执行的,并且试图处理这些指令,这里同样使用了乱序执行引擎。

linux gcc attribute

时间: 2024-12-27 10:02:37

linux gcc attribute的相关文章

嵌入式Linux GCC常用命令

本文和大家分享的主要是嵌入式Linux GCC常用命令相关内容,一起来看看吧,希望对大家学习嵌入式Linux有所帮助. 1.简介 GCC 的意思也只是 GNU C Compiler 而已.经过了这么多年的发展,GCC 已经不仅仅能支持 C 语言:它现在还支持 Ada 语言.C++ 语言.Java 语言.Objective C 语言.Pascal 语言.COBOL语言,以及支持函数式编程和逻辑编程的 Mercury 语言,等等.而 GCC 也不再单只是 GNU C 语言编译器的意思了,而是变成了 

Linux gcc getcwd()的实现 zhuan

通过getcwd()可以获取当前工作目录. 1 #include <unistd.h> 2 3 char *getcwd(char *cwdbuf, size_t size); Linux gcc getcwd()的实现 zhuan

gcc attribute weak &amp; alias应用

1          gcc attribute weak & alias应用 alias ("target") The alias attribute causesthe declaration to be emitted as an alias for another symbol, which must bespecified. For instance, void __f () { /* Do something. */; } void f () __attribute

LINUX gcc安装rpm包顺序

rpm -ivh cpp-4.1.2-42.el5.i386.rpm rpm -ihv kernel-headers-2.6.18-92.el5.i386.rpm rpm -ivh glibc-headers-2.5-24.i386.rpm rpm -ivh glibc-devel-2.5-24.i386.rpm rpm -ivh libgomp-4.1.2-42.el5.i386.rpm rpm -ivh gcc-4.1.2-42.el5.i386.rpm rpm -ihv libstdc++

linux gcc++漏洞:普通用户获得root权限

linux gcc++漏洞:普通用户获得root权限 2012-02-06 10:22:38|  分类: linux安全|举报|字号 订阅   经我测试在RHEL5 / CentOS5 / FC13都成功了. 首先介绍下一下具体步骤中涉及到的2个频繁的出现的词语: taviso:作者 Tavis Ormandy 的简称,Google信息安全工程师 个人微博:http://my.opera.com/taviso/blog/ http://twitter.com/taviso exploit:自己创

linux gcc loudong

五事九思 (大连Linux主机维护) 大连linux维护qq群:287800525 首页 日志 相册 音乐 收藏 博友 关于我 日志 spcark_0.0.3_i386.src.tar.gz(Linux口令破解) udev漏洞导致本地普通用户可提升到管理员权限 linux gcc++漏洞:普通用户获得root权限 2012-02-06 10:22:38|  分类: linux安全|举报|字号 订阅   经我测试在RHEL5 / CentOS5 / FC13都成功了. 首先介绍下一下具体步骤中涉及

深入剖析 linux GCC 4.4 的 STL string

转自: 深入剖析 linux GCC 4.4 的 STL string 本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术. 平台:x86_64-redhat-linuxgcc version 4.4.6 20110731 (Red Hat 4.4.6-3) (GCC) 1. 问题提出 最近在我们的项目当中,出现了两次与使用string相关的问题. 1.1. 问题1:新代码引入的Bug 前一段时间有一个老项目来

Linux gcc链接动态库出错:LIBRARY_PATH和LD_LIBRARY_PATH的区别

昨天在自己的CentOs7.1上写makefile的时候,发现在一个C程序在编译并链接一个已生成好的lib动态库的时候出错.链接命令大概是这样的: [[email protected] tcpmsg]# gcc -o hello main.c -lmyhello /usr/bin/ld: cannot find -lmyhello collect2: error: ld returned 1 exit status 1 gcc链接动态库时的搜索路径 自以为在当前工程中设置好了环境变量 LD_LI

Linux gcc中的LIBRARY_PATH 和 LD_LIBRARY_PATH

1. GNU 上关于LIBRARY_PATH的说明: LIBRARY_PATH The value of LIBRARY_PATH is a colon-separated list of directories, much like PATH. When configured as a native compiler, GCC tries the directories thus specified when searching for special linker files, if it