背景:如果可执行文件具有在共享对象中定义的外部数据引用,则编译器将使用复制重定位并将副本放置在其 .bss 部分中。此站点详细介绍了复制重定位: http://www.shrubbery.net/solaris9ab/SUNWdev/LLM/p22.html#CHAPTER4-84604
然而,我的问题是:
是否可以像共享对象中的外部数据引用一样,通过GOT来实现?可执行文件可以通过其GOT条目间接访问该外部代码,并且该GOT条目可以在运行时填充该符号的真实地址。我不知道为什么GCC不这样实现。复制迁移有什么好处?
我知道写入组合写入将被缓存,并且不会直接到达内存.但是,在其他人可以访问之前,程序员是否有必要明确地清除这个内存?
我从图形驱动程序代码中得到了这个问题.例如,CPU填充顶点缓冲区(映射为WC).但在GPU访问之前,我没有在代码中看到任何刷新操作.架构(x86)已经为我们解决了这个问题吗?关于这个的更详细的文件?