Doomsday_Envoy
MoonCakeMC 发表于 2023-3-18 22:01
本来想考虑一下的
但是最近环境不太方便反汇编()
而且devcpp编译出来的好像不是很适合反汇编( ...

听你描述像是没系统性学过汇编,但即便精通也未必能回答这个问题,因为这是工程的而非理论的。从高级语言到汇编在逻辑上并不复杂,但实际使用需求以及版本更新迭代之后,这个过程的实现就很复杂多样了。
你应该听说过,编译器的功能五花八门;对于某些编程语言的比较有时候也涉及对其编译器的比较,这就是问题所在了。但我只是听过几个案例,不是专攻这些的,油管搬运的视频好像有不少是这种听上去无厘头问题的技术性解释,去搜搜看吧。

MoonCakeMC
Doomsday_Envoy 发表于 2023-3-18 22:14
听你描述像是没系统性学过汇编,但即便精通也未必能回答这个问题,因为这是工程的而非理论的。从高级语言 ...

感谢大佬指路
确实没系统学过汇编,或者说根本没学过()
只不过是之前做逆向功能的时候散着看了看

编译器的问题倒是知道
但是还没测试
待会补测一下试试

_tms
之前试过,的确是这样,感觉很神奇(
所以我现在加sync_with_stdio已经成习惯了(

极光creeper
scanf printf 是 c 的做法,而 cpp 有自己的 cin 和 cout,为了兼容这两种做法,必须同步输入输出流,这是为了为了线程安全,因此你去同步以后,输入、输出流就不同步了,也就无法同时使用了。

可以这么理解,为了线程安全,于是同步,于是要付出性能代价。

如果你一定要问为什么解绑后 cin cout 更快,这个问题非常难以回答,太底层了,你可以这么想,毕竟 c++ 比 c 多两个加号。

普通快读其实没快多少,实际上那种手写缓冲区的快读才是比较快的,但是仅限于开 O2 的情况下
这里涉及到一些内存访问,几级cpu缓存的问题,以及 fread 的优势,实际上不开 O2 的话,后者优势不是那么大




开心的阿诺
以前我也做过类似的实验,数据如下:

下面开始猜测,未经证实,谨慎观看,错了打我 qwq
scanf和printf是基于格式化字符串的,而cin和cout估计是基于C++的一些特性,编译成直接的函数调用,少了解析字符串的过程

inuEbisu
要快还是得手写缓冲区

MoonCakeMC
inuEbisu 发表于 2023-3-18 23:43
要快还是得手写缓冲区

确实是()
但是感觉打OI的时候手写缓冲区没啥必要
(应该不会有题还卡快读吧……

第一页 上一页 下一页 最后一页