MSVC(和 icc)自动调用 memset C++

Posted

技术标签:

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

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

godbolt example

【问题讨论】:

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

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

struct Tmp

    String a0;
    String a1;
    String a2;

    Tmp() 
;

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

【讨论】:

以上是关于MSVC(和 icc)自动调用 memset C++的主要内容,如果未能解决你的问题,请参考以下文章

为 C 数学函数调用 MSVC 内置/内在函数

Qt5 msvc 2010不识别自动(c ++ 11)[重复]

C#调用DLL,参数是指针,怎么做?

icc2怎么打开数据

gcc、clang 和 msvc 的 C++ 自动矢量化要求

memcpy() 和 memset() 的奇怪行为 [关闭]