gpt4 book ai didi

c++ - tdm gcc 5.1 比 4.7 慢

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:49:13 26 4
gpt4 key购买 nike

我使用 tdm gcc 编译器编译我的 winapi 项目,当我测试一些简单的 mandelbrot sse 代码 9 时可能与其他项目一样,但我没有测试所有内容),5.1 生成更大的可执行文件 330kB 而不是 270kB(虽然我没有重新编译所有内容,仅热循环模块并与已编译的(在 4.7 中)链接)并且由于较慢的代码 23.5 ms/frame agianst 4.7 中的 20 ms 也很明显

这很可怕..我能用它做什么? (其余设置等相同,我只是将编译器文件夹从一个重命名为另一个

我使用类 C 代码,但在 C++ 模式下编译

也许有人知道如何解决它? (我的意思是决心使 5.1 构建至少与 4.7 一样快,也希望可执行文件更小)

//编辑

ps 我做了快速测试

因为我可能会在 51 中编译循环模块并在 47 中链接所有内容

编译循环 47 链接 47:大小 270k 速度 20 毫秒

编译循环 51 链接 51:大小 330k 速度 23.5 毫秒

编译循环 47 链接 51:大小 330k 速度 20 毫秒

编译循环 51 链接 47:大小 270k 速度 23.5 毫秒

说明51年编译速度下降尺寸膨胀来自链接 51

最佳答案

不同的C++编译器版本使用不同的C++引擎

  • 代码可能相同
  • 但引擎没有

C++ 引擎

  • 负责很多事情,例如:

    1. 内存管理(堆栈、堆、本地/全局/动态/静态/临时变量)
    2. 模板/类/结构/虚拟管理
    3. 指针管理
    4. 还有更多
  • 您可以将其视为一个操作系统(在某些情况下,它主要是在 MCU 平台上的操作系统)

  • 或作为操作系统和您的应用程序之间的中介
  • 因此较新的版本通常会同时处理更多影响性能的事情
  • 这可以在文件大小上看到(链接器将引擎添加到您的可执行文件中)
  • 性能主要受到大量使用的影响:

    1. 动态内存分配/释放
    2. 类(class)
    3. 堆/堆栈垃圾处理

另一个可能的原因是链接库的版本

  • 如果您正在使用任何类型的库(如 std ...)
  • 然后较新的编译器/链接器可能包含它们的较新版本(根据其包含路径)
  • 这也会影响性能
  • 如果某些库无法识别较新版本的 GCC 定义
  • 他们可以在内部切换到更慢/更安全的代码

如何将行为设置回旧样式

  • 如果需要,请使用旧的编译器/链接器
  • 在较新的版本中,您可以使用较旧的引擎(但这可能会导致以后出现问题)
  • 查找如下文件:

    crt0.o
    crtfv.o
    libc.a
  • 或类似的并用旧版本替换它们

  • 但不建议这样做...

关于c++ - tdm gcc 5.1 比 4.7 慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32235494/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com