【问题标题】:MSVC (and icc) automatically calling memset C++MSVC(和 icc)自动调用 memset C++
【发布时间】:2019-06-08 13:15:43
【问题描述】:

我大量使用大数据结构,每次创建(通过放置新)它时,编译器都会自动添加“memset”调用。即使在发布模式下,即使我将 /SDL 和 /GS 设置为 OFF。这绝对是多余的,它会产生一些我不需要的开销。 如何防止产生多余的 memset 调用?

godbolt example

【问题讨论】:

  • 我猜至少使用 gcc 你可以使用 -ffreestanding 并将你自己的 memset 放入你的代码中,它什么都不做。或者尝试单独初始化结构变量..这可能会阻止编译器添加 memset。
  • 如果我添加自己的 memset 或进行任何其他数据初始化(即使我不需要它们) - 这无济于事 - MSVC 会以任何方式生成额外的 memset

标签: visual-c++ initialization memset overhead


【解决方案1】:

你可以实现Tmp::Tmp()构造函数来摆脱memset,即:

struct Tmp
{
    String a0;
    String a1;
    String a2;

    Tmp() {}
};

https://godbolt.org/z/J6-C8S

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2014-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多