C++ inline weak symbol and so on】的更多相关文章

关于inline这个关键字,听到强调得最多的是,它只是一种对于编译器的建议,而非强制执行的限定. 但事实上,即使这个优化最终由于函数太过复杂的原因没有达成,加上inline关键字(还有在类定义中直接定义的函数也相当于加上了inline关键字)还是会带来一些区别的. 参看C++11标准文档里面的描述: A function declaration (8.3.5, 9.3, 11.3) with an inline specifier declares an inline function. The…
首先,同样的原型的两个函数在连个不同的c文件中都有定义,把这两个c文件编译.连接在一起,也没有什么错误.原因就是因为,gcc中有一个strong symbol和weak symbol的概念.默认函数定义都是strong symbol的,两个相同的strong symbol连接在一起,肯定会产生”symbol重复定义”的错误. 但是,这里我们将weak_symbol.c中的common_print加了weak属性,这样gcc再选择的时候优先选择strong symbol 2)      其次,根据…
很久以前写在百度空间的这篇文章: [百度空间] [原] 全局operator delete重载到DLL 首先,纠正一个词“重载”,operator new/delete是替换(replacement),不是重载.只要任意一个编译单元定义了替换函数,并不需要全局声明,不用包含头文件,就会替换掉全局的默认operator new/delete, 这个行为非常像gcc的strong symbol/weak symbol. 最近翻看了C++03的标准: 3. The program’s definitio…
最近查看linux内核代码时,表现了一些编译器选项如__attribute_((weak)).__attribute__( (alias("target"))),一开始不了解,后来自己查看资料及书籍算是对gcc的这个编译属性有了一定的认识. 一.先了解weak属性. __attribute__((weak))表示为弱符号属性,所谓的弱符号是针对于强符号来说的,我们定义的全局已初始化变量及全局函数等都是属于强符号,在链接时如果有多个强符号就会报错误:而弱符号主要指未初始化的全局变量或通过…
一.概述 在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号. 对于它们,下列三条规则使用: ① 同名的强符号只能有一个,否则编译器报"重复定义"错误. ② 允许一个强符号和多个弱符号,但定义会选择强符号的. ③ 当有多个弱符号相同时,链接器选择占用内存空间最大的那个. 二.哪些符号是弱符号? 我们经常在编程中碰到一种情况叫符号重复定义.多个目标文件中含有相同名字全局符号的定义,那么这些目标文件链接的时候将会出现符号重复定义的错误.比如我们在目…
Weak Alias 跟 Weak Reference 完全没有任何关系,不过是我在看到 Weak Reference 的时候想到的而已. Weak Alias 是 gcc 扩展里的东西,实际上是函数的属性.这个东西在库的实现里面可能会经常用到,比如 glibc 里面就用了不少.抄录一段 gcc 手册里面的话解释下函数属性是干啥的, In GNU C, you declare certain things about functions called in your program which…
弱符号是什么? 弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误.链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号.当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号.弱符号也称为weak alias(弱别名). attribute((weak))的作用 情况是这样的,碰到一个棘手的问题:我们不确定外部模块是否提供一个函…
参考gcc的reference: 弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局符号不会引发重定义错误.链接器会忽略弱符号,去使用普通的全局符号来解析所有对这些符号的引用,但当普通的全局符号不可用时,链接器会使用弱符号.当有函数或变量名可能被用户覆盖时,该函数或变量名可以声明为一个弱符号.弱符号也称为weak alias(弱别名). 怎样声明弱符号: 通过alias,结合weak属性,声明一个弱符号,例如: 1: int…
转自:https://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html 5.24 Declaring Attributes of Functions In GNU C, you declare certain things about functions called in your program which help the compiler optimize function calls and check your…
最近在看一些源代码,遇到了一些使用__attribute__修饰函数和变量的属性方面的代码,不是太了解,很是汗颜,再此做个总结:   GCC使用__attribute__关键字来描述函数,变量和数据类型的属性,用于编译器对源代码的优化. 描述函数属性的几个重要的关键字:   void noreturnfun() __attribute__((noreturn));//函数不会返回. void centon() __attribute__((alias("__centon")));//设…
Intro to the LLVM MC Project The LLVM Machine Code (aka MC) sub-project of LLVM was created to solve a number of problems in the realm of assembly, disassembly, object file format handling, and a number of other related areas that CPU instruction-set…
专题文档汇总目录 Notes:timekeeping模块的狠心数据结构是timekeeper,它维护了系统不同类型时钟的时间值,并且介绍了获取不同类型时钟时间的函数. clocksource切换通过clocksource_notify通知到timekeeper.最后介绍了timekeeper电源管理相关问题,注册为syscore_ops进行suspend-resume,涉及到睡眠时间.hrtimer.clocksource和clockevents的suspend/resume. 原文地址:Lin…
linux内核源码Documentation目录下存在kprobe介绍文档如下 Kprobes allows multiple probes at the same address.  Currently, however, there cannot be multiple jprobes on the same function at the same time. If you install a probe in an inline-able function, Kprobes makes…
constexpr函数是指能用于常量表达式的函数.定义constexpr函数的方法有其他函数类似,不过要遵循几项约定:函数的返回值类型及所以形参的类型都是字面值类型,而且函数体中必须有且只有一条return语句.为了能在编译过程中随时展开,constexpr函数被隐式指定地指定为内联函数. constexpr函数体内也可以包含其他语句,只要这些语句在运行时不执行任何操作就行.例如,constexpr函数中可以有空语句.类型别名以及using声明. 允许constexpr函数的返回值并非一个常量:…
init/main.c /* * Activate the first processor. */ static void __init boot_cpu_init(void) { int cpu = smp_processor_id(); /* Mark the boot cpu "present", "online" etc for SMP and UP case */ set_cpu_online(cpu, true); set_cpu_active(cpu,…
This document is the user manual for the Yasm assembler. It is intended as both an introduction and a general-purpose reference for all Yasm users. 1. Introduction Yasm is a BSD-licensed assembler that is designed from the ground up to allow for mult…
就在近日,Facebook宣布开源了内部使用的C++底层库,总称folly,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能的需求. 这里是folly的github地址:https://github.com/facebook/folly 在folly项目的Overview.md中,谈到了folly库的初衷: It complements (as opposed to competing against) offerings such as Boost and of course s…
​​ 作者:良知犹存 转载授权以及围观->欢迎添加Wx:Allen-Iverson-me-LYN 缅怀逝者,向英雄致敬.愿山河无恙,国泰民安. 在用C/C++写代码的时候我们经常会使用一些标识符,置于函数或者变量之前,这些标识符有些是限制函数或者变量的使用,有些是提高函数的执行效率,有些则是特殊函数的标志,下面我们来进行介绍.标识符有很多,此处仅介绍常用的标识符,很多知识是边写边边学习,参考了很多前辈的文章.所以这是篇站在巨人肩膀上的文章,希望可以帮到大家. 一.static 静态符号 概念介绍…
最近在看 CSAPP (Computer Systems A Programmers Perspective 2nd) 的第七章 链接.学到了点东西,跟大家分享.下文中的例子都是出自CSAPP第七章. 另外,也可以结合酷壳上的这篇文章和之后的留言来看本文,理解会更加深刻一些.1.问:如果在不同的C源文件中定义了相同名称的全局变量会有什么样的后果呢? 比如下面的这种情况: 有两个源文件foo3.c和bar3.c:foo3.c #include <stdio.h> void f(void); ;…
转自:http://blog.csdn.net/astrotycoon/article/details/8008629 一.概述 在C语言中,函数和初始化的全局变量(包括显示初始化为0)是强符号,未初始化的全局变量是弱符号. 对于它们,下列三条规则使用: ① 同名的强符号只能有一个,否则编译器报"重复定义"错误. ② 允许一个强符号和多个弱符号,但定义会选择强符号的. ③ 当有多个弱符号相同时,链接器选择占用内存空间最大的那个. 二.哪些符号是弱符号? 我们经常在编程中碰到一种情况叫符…
ldd和nm是Linux下两个非常实用的程序分析工具.其中,ldd是用来分析程序运行时需要依赖的动态链接库的工具,nm是用来查看指定程序中的符号表信息的工具. 1 ldd 格式:ldd [options] file    功能:列出file运行所需的共享库 参数: -d    执行重定位并报告所有丢失的函数 -r    执行对函数和对象的重定位并报告丢失的任何函数或对象 tanghuaming@Thm:~/Documents/sys_programming$ whereis ldd ldd: /…
__attribute__机制是GNU C的一大特色,可以用来设置函数,变量和数据类型的属性,下面对工作中正好用到的两个属性做下简单介绍. 1. constructor 这个属性指定函数在main函数执行之前执行 static void RunBeforeMain(void) __attribute__ ((constructor)); void RunBeforeMain(void){ printf(“%s \n”, __FUNCTION__); } int main(void){ print…
今天读别人代码时看到一个“#pragma weak”,一时没明白,上网研究了一个下午终于稍微了解了一点C.C++中的“弱符号”,下面是我的理解,不正确的地方望大家指正. 本文主要从下面三个方面讲“弱符号”: 1. 什么是“弱符号”? 它与“强符号”的区别是什么? 2. 弱符号的有什么作用? 3. 弱符号的实际应用实例 1.什么是弱符号? 在WikiPedia中弱符号的定义是: a weak symbol is a symbol definition in an object file or dy…
摘自http://blog.csdn.net/solmyr_biti/article/details/6565479 nm命令介绍的很多,但大多不介绍其函数符号标志的含义.最近在调试动态库时常用到,其中用的最多的用法:nm -A * |grep “aaa” | c++filt  // -A 为了显示文件, c++filt转换为可读风格,好像有个参数也能实现类似功能 其他内容整理如下(原作者未知): nm用于列出目标文件的符号清单,如果没有指定目标文件,则默认为“a.out”.nm的格式如下: n…
一 常用脚本 1 打包脚本 脚本如下,下面附上ar 和 ranlib命令参考(命令来自于网络) ALLLIB=*.aFILE=`ls *.a`#原来的库解压重命名 for F in $FILEdo        ar x $F        OBJ=`ar t $F`        for O in $OBJ        do                mv $O ${F}_${O}        donedone #ar c 创建一个库,ar r 插入文件.ar s ==ranlib 向…
system.map内容格式为:线性地址类型符号 具体内容如下: 00100000 A phys_startup_32 c0100000 T startup_32 c0100000 A _text                             注:表示内核代码第一个字节的地址 c01000c6 t checkCPUtype c0100147 t is486 ... c02f97b0 T __kprobes_text_end c02f9abe t iret_exc c02fa1af A…
Linux工具参考篇 原文出处:[Linux Tools Quick Tutorial] 1. gdb 调试利器 2. ldd 查看程序依赖库 3. lsof 一切皆文件 4. ps 进程查看器 5. pstack 跟踪进程栈 6. strace 跟踪进程中的系统调用 7. ipcs 查询进程间通信状态 8. top linux下的任务管理器 9. free 查询可用内存 10. vmstat 监视内存使用情况 11. iostat 监视I/O子系统 12. sar 找出系统瓶颈的利器 13.…
mxnet的训练过程--从python到C++ mxnet(github-mxnet)的python接口相当完善,我们可以完全不看C++的代码就能直接训练模型,如果我们要学习它的C++的代码,从python训练与预测的模型中可以看到C++的代码是怎么被调用的.上一篇博客中,我已经说明了mshadow的工作原理--mshadow的原理--MXNet:在这一篇中,来说明一下mxnet的训练过程,看python是调用发哪些C++的接口,但对C++接口的更进一步解释并没有很详细,具体可以自己看源码,后面…
原文链接:http://blog.csdn.net/statdm/article/details/7759100 本文要介绍的ldd和nm是linux下,两个用来分析程序很实用的工具.ldd是用来分析程序运行时需要依赖的动态库的工具:nm是用来查看指定程序中的符号表相关内容的工具.下面通过例子,分别来介绍一下这两个工具:1. ldd, 先看下面的例子, 用ldd查看cs程序所依赖的动态库: [plain] view plaincopy $ ldd cs linux-gate.so.1 =>  (…
本文翻译自:https://www.sitepoint.com/practical-guide-css-variables-custom-properties/ 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. Sass和Less这样的预处理器,让我们的CSS代码保持良好的结构和可维护性.像变量.混合(mixins).循环控制等特性,增强了动态编写CSS的能力,从而减少重复代码,也加快了我们开发速度. 近年来,一些动态特性开始作为规范的一部分,出现在CS…