您现在的位置:首页 --> 查看专题: 内联汇编
最近在优化一段代码的过程中,用到了gcc的内联汇编。代码中有用到了许多全局变量,比如: char mi[10]={...}; 开始的时候,我对全局变量的取址是这样的: __asm__ (\"movq (%2, %1, 1 ), %0\" :\"=r\"(cookie) :\"r\"(index),\"r\"(mi) ); 在一个函数中使用这段代码,一条指令完成了对mi数组的访问,但同时也存在问题,即mi的地址会占用一个寄存器,mi的地址要在早先的时间内被装载到寄存器中(指令由编译器自动生成),同时,被mi占用的寄存器有些情况下不能被其他手工内联的汇编指令随便写入,编译器还没有那么智能帮你讲寄存器的内容保存好。 综上,使用这种方法会存在两方面问题: 1、使用至少两条指令来读取全局变量 2、正确性要小心呵护。
[ 共1篇文章 ][ 第1页/共1页 ][ 1 ]
近3天十大热文
- [568] Go Reflect 性能
- [30] 正态分布的前世今生(一)
- [18] Linux Used内存到底哪里去了?
- [16] 基于HTTP缓存轻松实现客户端应用的离线支持
- [14] 在JavaScript中什么时候使用==是正
- [14] rsync同步的艺术
- [14] 公钥私钥加密解密数字证书数字签名详解
- [13] Cuckoo Filter:设计与实现
- [13] Joomla反序列化漏洞的查漏补缺
- [13] Linux内存中的Cache真的能被回收么?
赞助商广告