设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2108|回复: 12
打印 上一主题 下一主题

[有事请教] 关于gcc编译器优化

[复制链接]

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

跳转到指定楼层
1
发表于 2017-12-13 21:34:11 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 SixRC 于 2017-12-13 21:37 编辑

最近因为更新了编译器发现一堆新东西
其中之一就是
gcc 有一个优化选项是跳指令的对齐
比方 jmp 到的地方从 0x1A 优化为 0x1C
可能就是在目标指令前前面加一条
lea esi,[esi]  指令 正好两字节
这条指令还可以翻译成三字节 四字节 六字节 (其余?)
但是 我不懂
这样能提高效率吗...
因为寻址的关系所以对齐?
还有的情况是从 0xB 加了 nop 和 lea esi,[esi] 对齐到0x10
开 -O1 不会有这种跳的对齐 开 -O3 就会有
不懂不懂不懂
求指教
想不通想不通想不通

或者说是 在大的循环前面对齐
所以加快后面重复回跳的速度?

Lv4.逐梦者

梦石
0
星屑
5039
在线时间
1780 小时
注册时间
2012-7-3
帖子
1799

开拓者

2
发表于 2017-12-13 22:19:57 | 只看该作者
我们老师倒是更喜欢使用
XOR AX,AX来清空AX寄存器
老师对此的解释是,这样翻译成机器码更短,执行起来速度更快

寻址方面大概还有奇偶地址对齐的问题在吧
还在学习中,希望能够有大神来解释下(比如黄鸡dalao
@fux2
@guoxiaomi
打扰啦~

点评

xor确实短呀 一直也以为xor好 不过发现编译器会写一些 mov eax,0 5字节 为了对齐 到底怎么好要考虑的太多啦 只能怪自己懂太少 好好学习吧我就  发表于 2017-12-14 00:36

评分

参与人数 1+1 收起 理由
SixRC + 1 塞糖

查看全部评分

Project Ktr进行中:
   
------------------
SRPG开发之六-天气与地形互动
→→围观
→→→去Lofter围观
------------------
离经叛道的扯淡者/伪独立游戏爱好者/Decade Studio(?)/造轮子真TM开心呀
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
13559
在线时间
2753 小时
注册时间
2014-10-4
帖子
756

R考场第七期纪念奖

3
 楼主| 发表于 2017-12-14 10:35:45 | 只看该作者
大致了解了
intel有指令预读取
每次16字节 然后送去解码执行
假如跳转分支没有对齐
那么只能预读取到下一个对齐点
导致喂不饱指令执行器
所以循环最好16字节对齐
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1803
在线时间
133 小时
注册时间
2013-10-6
帖子
193
4
发表于 2017-12-14 13:11:29 | 只看该作者
所以手写汇编不一定有编译器做出来的快)
据说intel编译器还有蜜汁加成

点评

C或汇编 各有各的优缺点啦 编译器毕竟是死的 还是要好好学习为什么 然后两相结合吧  发表于 2017-12-14 17:10

评分

参与人数 1+1 收起 理由
SixRC + 1 塞糖

查看全部评分

←你看到一只经常潜水的萌新。
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
1
星屑
23963
在线时间
3338 小时
注册时间
2011-7-8
帖子
3925

开拓者

5
发表于 2017-12-14 13:13:33 | 只看该作者
我不懂汇编,只会一点ruby和php without sql……

我其实是学物理的 ( x

点评

我是文科啦 很多事只是觉得很有趣才去看的 嗯 阴差阳错吧 居然是文科 或者说 还好是文科 可以玩耍没有压力吧  发表于 2017-12-14 18:20
强烈建议接触!从不同角度看编程 会有许多收获吧 汇编 比起说是语言 不如说是一套底层的规则吧 解答了许多我不懂的东西  发表于 2017-12-14 17:31

评分

参与人数 1+1 收起 理由
SixRC + 1 塞糖

查看全部评分

熟悉rgss和ruby,xp区版主~
正在填坑:《膜拜组传奇》讲述膜拜组和学霸们的故事。
已上steam:与TXBD合作的Reformers《变革者》
* 战斗调用公共事件 *
* RGSOS 网络脚本 *
回复 支持 反对

使用道具 举报

Lv5.捕梦者 (管理员)

老黄鸡

梦石
0
星屑
39607
在线时间
7482 小时
注册时间
2009-7-6
帖子
13482

开拓者贵宾

6
发表于 2017-12-14 17:49:33 | 只看该作者
我从来不关心对齐方面的东西(x
毕竟为了对齐多塞指令也不见得比不对齐的快,再说这么一点程度的优化估计解决不了什么问题(x

评分

参与人数 1+1 收起 理由
SixRC + 1 嗯 不知道 ヽ(ー_ー )ノ管它呢 反正搞懂为.

查看全部评分

RGDirect - DirectX驱动的RGSS,点我了解.
RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9275
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

7
发表于 2017-12-14 21:25:00 | 只看该作者
对齐这种事情只要开发者开心就好···

评分

参与人数 1+1 收起 理由
SixRC + 1 ヽ( ´¬`)ノ

查看全部评分

[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
8
发表于 2017-12-22 23:22:16 | 只看该作者
本帖最后由 寒冷魔王 于 2017-12-22 23:24 编辑

最近刚做完一个 外部函数接口的 FFI 项目(的x64分支)。所以对 x64 的函数调用方面比较了解。

LZ 说的是指令读取方面的对齐要求,其实在栈的方面也有类似要求。

x64 下面,在调用函数的时候,必须保证栈16字节对齐。
这个在 MS64 和 SysV64 的 ABI 下都是有强制规定的。

具体可以参考 https://en.wikipedia.org/wiki/X86_calling_conventions

话说楼主对这个项目感不感兴趣? 地址 我需要苦力同伴来完成其他平台上的内容。

点评

指令读取上是没有明确对齐要求的吧..要对齐是物理原因 虽然要求了 不一定都需要16字节对齐的 话说 不是很懂FFI的作用 大概帮不上忙啦  发表于 2017-12-23 12:29

评分

参与人数 1+1 收起 理由
SixRC + 1 塞糖

查看全部评分

SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-20 18:29

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表