广州网站建设联雅如何在图片上做网站水印图
广州网站建设联雅,如何在图片上做网站水印图,一个手机网站,取名字大全免费查询Weak Alias 跟 Weak Reference 完全没有任何关系#xff0c;不过是我在看到 Weak Reference 的时候想到的而已。 Weak Alias 是 gcc 扩展里的东西#xff0c;实际上是函数的属性。这个东西在库的实现里面可能会经常用到#xff0c;比如 glibc 里面就用了不少。抄录一段 gcc … 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 help the compiler optimize function calls and check your code more carefully. 先上代码看看 weak alias 怎么写。第一个文件 dummy.c 内容
#include int __foo() { puts(”I do no thing.”); } int foo() __attribute__ ((weak,alias(”__foo”))); weak 和 alias 分别是两个属性。weak 使得 foo 这个符号在目标文件中作为 weak symbol 而不是 global symbol。用 nm 命令查看编译 dummy.c 生成的目标文件可用看到 foo 是一个 weak symbol它前面的标记是 W。给函数加上weak属性时即使函数没定义函数被调用也可以编译成功。
00000000 T __foo 00000000 W foo U puts 而 alias 则使 foo 是 __foo 的一个别名__foo 和 foo 必须在同一个编译单元中定义否则会编译出错。 那么这个东西的用处是 看第二个文件func.c,
#include int foo() { puts(”I do something.”); } 这里有一个函数名字是 foo。如果我们编译 func.c 和 dummy.c 得到两个目标文件当我们同时使用 func.o 和 dummy.o 和其他目标文件进行链接时如果其他目标文件里面引用符号 foo最终使用到的是 func.c 中定义的函数而不是 __foo虽然它有一个别名 foo。也就是说我们最终使用到的函数会是“实际做事”的那个函数。当然单独使用 dummy.o 链接的话使用的是那个“不做事”的函数。如果 dummy.o 中的 foo 不是 weak symbol 的话在链接时会产生冲突这就是我们要使用 weak 的原因。 glibc 的实现里面经常用 weak alias。比如它的 socket 函数在 C 文件里面你会看到一个 __socket 函数它几乎什么都没有做只是设置了一些错误代码返回些东西而已。在同一个 C 文件里面会再声明一个__socket 的 weak alias 别名 socket。实际完成工作的代码通过汇编来实现在另外的汇编文件里面会有设置系统调用号执行 sysenter 或者 int 等动作去请求系统调用。以前看 glibc 里面系统调用的实现的时候郁闷过很久就是那个时候才知道了 weak alias 这个东西。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/90255.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!