问题标签 [compiler-explorer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - unique_ptr 没有在编译器资源管理器中生成删除指令?
我最近一直在玩Compiler Explorer。我加载了一个采用指针参数的示例,并将其更改为采用 unique_ptr 参数。但我注意到在输出程序集中,对 operator delete 的调用明显不存在。我很好奇是否有人知道为什么。
这是一个可以粘贴到资源管理器中的示例。一定要-O3
输入编译器选项。
编辑:同样为了比较,如果我粘贴来自 cppreference 的代码示例之一,那么我会在输出中得到 operator delete。
编辑:+1 给 krzaq。构造和销毁参数的是调用者,而不是被调用者。
c++ - 使用 Godbolt 进入标准库调用
我想知道各种编译器是如何实现std::random_device
的,所以我把它弹出到Godbolt中。
不幸的是,它唯一说的是
这不是很有帮助。我如何才能进入_M_getval()
通话并检查那里的程序集?
c++ - 为什么编译器资源管理器上的 Visual Studio 会忽略异常模型设置?
当我尝试在Compiler Explorer 测试用例/EHs
中使用该标志(以“启用”通过函数的异常)时,VC++ 19.22 似乎忽略了它,因为它仍然踢出 C5039 而实际上并未更改代码。extern "C"
我错过了什么?我忘记了另一个开关还是什么?
- 基本情况命令行:
/O1 /EHsc /Wall /wd4571
- 测试用例命令行:
/O1 /EHs /Wall /wd4571
c++ - #include of a HTTP URL in C++
I was looking at a random C++ example on Github ( https://github.com/Quuxplusone/coro/blob/master/examples/pythagorean_triples_generator.cpp ), and was surprised to see that it actually compiles ( https://coro.godbolt.org/z/JXTX4Y ).
Is this a new C++20 feature, or an extension on Godbolt, or something entirely else?
c++ - 如何使用 Godbolt(编译器资源管理器)测试 C++ 模块?
为了询问或演示 C++20 中自写模块的错误/功能,能够使用Matt Godbolt 的编译器资源管理器会很棒。
例子:
test.cpp(模块测试):
编译clang++ -std=c++20 -stdlib=libc++ -fmodules -c -Xclang -emit-module-interface -o test.pcm test.cpp
主.cpp:
编译clang++ -std=c++20 -stdlib=libc++ -fmodules -fimplicit-modules -fimplicit-module-maps -fprebuilt-module-path=. main.cpp
问:有没有办法用编译器资源管理器做到这一点?
c++ - 为什么 MSVC C++ 编译器将一个简单的 Hello World 扩展为 4000 行汇编?
最近我正在潜心优化我的 C++ 代码,因此开始使用编译器资源管理器。由于我主要使用 Visual Studio 在 Windows 上进行开发,因此我使用了 msvc 编译器。
在某些时候,msvc 失控了。经过一番摆弄后,我可以将其缩小到 iostream 标头,这应该是 I/O 的首选(SL.io.3)。
虽然 gcc 或 clang 的总输出(main + 一个调用一些ios_base
init 函数的静态初始化程序)总共大约 20 行汇编(在 Godbolt 编译器资源管理器过滤掉指令和注释之后)。
MSVC 将其分解为 4000 行。这些行中的大多数是单独的函数;MSVC 对main
自身的定义是 7 条指令,而 gcc/clang 则为 8 条。(使用 GNU/Linux 的 gcc/clanglibstdc++
将额外长度的 arg 传递给 cout 运算符重载函数,而不仅仅是 MSVC 在使用其自己的 C++ 库时所做的 2 个指针。)
如果我改用类似的东西puts
,MSVC 的总输出相当紧凑,与 gcc/clang 相当,就像这里一样。
有人可以向我解释这里发生了什么,我做错了什么或指出我正确的方向吗?
为什么使用 C++ 库的简单函数的 MSVC asm 列表如此臃肿?
assembly - 如何在(发布)Rust 构建中找到我的函数的汇编代码?
Compiler Explorer似乎能够可靠地找到与函数对应的汇编代码。x86_64-unknown-linux-gnu
假设一个工具链、一个常规(无属性)函数,并且没有额外的工具,我怎么能自己做到这一点cargo-asm
?
我知道要生成程序集,我可以使用rustc's --emit asm
flag。有人可能认为找到函数就像在 .s 文件中搜索其名称一样容易,但我发现并非如此。
例如,.s 文件通常甚至没有提及函数名称,在这种情况下,添加#[inline(never)]
到函数中会有所帮助。其次,找到带有函数名称的标签后,如何确定函数的结束位置?在我的测试箱中,我发现在更下方的指令中再次提到了函数名称.size
——这可能标志着函数的结束吗?或者它可能是retq
函数启动后的第一个?
假设这个目标是可以实现的,我希望学习:
- 找到函数的开始和结束的最可靠方法是什么?
- 获得合适的汇编文件的先决条件是什么?
c++ - How to generate godbolt like clean assembly locally?
I want to generate clean assembly like Compiler Explorer locally. Note that, I read How to remove “noise” from GCC/clang assembly output? before attempting this. The output using that method isn't as clean or dense compared to godbolt and still has a lot of asm directives and unused labels in it.
How can I get clean assembly output without any unused labels or directives?
assembly - 编译器资源管理器中的调试信息
编译器资源管理器中的“调试部分”是什么?
这是编译器资源管理器内部使用的东西,或者这究竟显示了什么?我知道我可以通过过滤掉指令和未使用的标签来摆脱它,但是这部分是什么?
这是一个示例:https ://godbolt.org/z/oozxKj 。
c++ - 可变长度数组的高性能“正确”C++ 替代方案
我正在编写一个需要在运行时创建数组的函数。该数组将很小,因此我不担心不安全的代码,但是,我想编写“正确”的代码。因此,我正在考虑三种选择:
- 字符数组[len];
- 字符数组 = 新字符(长度);
- 标准::向量数组(len);
使用Compiler Explorer将它们与 -O3 进行比较。结果是这样的:
- 12 条指令,0 次调用 new
- 21 条指令,1 次调用 new
- 118 条指令,2 次以上新的调用
我是否缺少对 std::vector<> 的优化,或者“正确”的 c++ 方式是否较慢,或者我完全错过了一种编码方式?
编辑:我忘了删除堆分配的数组
测试代码:
代码1:
代码2:
代码 3: