一点前景:我的任务需要将UTF-8 XML文件转换为UTF-16(当然还有正确的标题).所以我搜索了将UTF-8转换为UTF-16的常用方法,并发现应该使用来自的模板<codecvt>.
但现在当它被弃用时,我想知道执行相同任务的新常用方法是什么?
(根本不介意使用Boost,但除此之外我更喜欢尽可能靠近标准库.)
我正在阅读预防编译器优化,同时描述Chandler Carruths 如何clobber()和escape()来自 CppCon 2015:Chandler Carruth"调优C++:基准测试,CPU和编译器!哦我的!".影响编译器.
从阅读那里,我假设如果我有一个输入约束,如"g"(val),那么编译器将无法优化val.但是在g()下面,没有生成代码.为什么?
如何doNotOptimize()重写以确保生成代码g()?
template <typename T>
void doNotOptimize(T const& val) {
asm volatile("" : : "g"(val) : "memory");
}
void f() {
char x = 1;
doNotOptimize(&x); // x is NOT optimized away
}
void g() {
char x = 1;
doNotOptimize(x); // x is optimized away
}
Run Code Online (Sandbox Code Playgroud)
c++ assembly inline-assembly performance-testing compiler-optimization
一个真棒文章约PE格式规定如下:
名称。每个节标题都有一个名称字段,长度最多八个字符,对于第一个字符必须为一个句点。
但是我知道一些违反此规则的示例,从.gnu_debuglink二进制文件内的部分开始,这些示例以DWARF格式分离了调试符号。另外侏儒的.debug_arranges,.debug_info以及其他违反本。(为了进行比较,PDB的“分离”部分名称仅为.debug。)
因此,我想知道本文是否只是过时/不完整,或者这是Windows特定的准则,还是对节名称长度没有任何限制?
如果有人给我指向任何有关PE / COFF二进制的书(ELF也会很棒),并且甚至比在线文章更全面,我也会很高兴。或关于系统编程的一般知识-有关此主题的信息非常稀缺或已过20年了。:)