技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 查看专题: gcc
    最近在优化一段代码的过程中,用到了gcc的内联汇编。代码中有用到了许多全局变量,比如: char mi[10]={...}; 开始的时候,我对全局变量的取址是这样的: __asm__ (\"movq (%2, %1, 1 ), %0\" :\"=r\"(cookie) :\"r\"(index),\"r\"(mi) ); 在一个函数中使用这段代码,一条指令完成了对mi数组的访问,但同时也存在问题,即mi的地址会占用一个寄存器,mi的地址要在早先的时间内被装载到寄存器中(指令由编译器自动生成),同时,被mi占用的寄存器有些情况下不能被其他手工内联的汇编指令随便写入,编译器还没有那么智能帮你讲寄存器的内容保存好。 综上,使用这种方法会存在两方面问题: 1、使用至少两条指令来读取全局变量 2、正确性要小心呵护。
    上周有位网友联系我说chaos在他的环境上编译不过,并发给我了一些错误信息 查看了编译错误信息之后并没得到太多排查的入口,询问了对方的编译器版本是gcc 4.6.3,而我基本都是工作在4.1版本左右的gcc上,周末在家自己搭了个4.6.3的环境,果然也出现了同样的问题,之后发现这是因为高版本gcc(g++)对c++模板的检查更为严格所导致的,我们直接看例子
    最近在编译项目的时候,出现的first define here的错误。仔细排查了.h文件的define定义等,最后发现是自己定义类的时候写法有问题。因为这个问题浪费了很长时间,所以特别记在这里。做测试如...
    /tmp/ccOyKFI8.o:(.eh_frame+0×12): undefined reference to `__gxx_personality_v0′ collect2: ld returned 1 exit status GCC后面要带-lstdc++参数
[ 共4篇文章 ][ 第1页/共1页 ][ 1 ]
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1