|
发表于 2022-5-10 01:29:57
|
显示全部楼层
广西壮族自治区崇左市
速度上来说, 这个没必要, 调用1亿次也差不了几毫秒
调用函数就是call之前多了一行 push指令, push指针, 那应该是5个字节
函数里一般就是 [ebp+xx] 或者 [esp - xx] 就能定位到
如果你要全局变量的话, 那就是 mov eax, 0x地址, 5 个字节
mov eax, [ebp+xx] 这个忘了, 应该不到5个字节, 应该3个字节就可以
总体来说, 并不会慢什么, 这一点效率基本是忽略不计了
读取数组成员, 一般有两种方式, 一个是 [寄存器] 或者 [寄存器+偏移], 另一个是 [地址] 或者 [地址+偏移]
mov xxx, [寄存器] 两个字节, mov xxx, [寄存器+索引] 3个字节, 索引255以内
mov xxx, [地址] mov xxx, [地址+偏移] 这个一般会转换成 mov xxx, [地址] 这种, 一行指令5个字节
这么算下来的话, 谁快还不一定呢.....
实际测试一下吧, 由于全局变量是固定地址, 所以只能运行后获取, 然后动态生成汇编, 自己jmp过去
这个操作起来比较麻烦, 要是c++的话, 不存在这个问题, c++内联汇编直接可以使用全局变量
另一个就是传递数组指针, 多一个push, 多4个字节左右, push1个字节, 获取数组指针应该是3个字节
然后函数里就从ebp获取数组指针, 直接操作寄存器
这么算下来的话, 我怎么感觉多push一个参数比直接使用全局变量还要快呢 |
|