memset 的速度与直接赋值为零的速度

2023-12-04

请考虑下面的结构定义。

struct xyz {
  char a;
  void *ptr;
  uint16_t num1;
  uint32_t num2;
  uint64_t num3;
};

我可以通过以下三种方式之一将此结构的实例初始化为零。

  1. 申报时

    struct xyz instance = { 0 };
    
  2. 在使用 C-99 功能声明它之后的某个时间。

    instance = (const struct xyz) { 0 };
    

3.memset (&instance, 0, sizeof (struct xyz));

典型的 C 结构体可能会由编译器添加一些填充以用于对齐目的。 因此 memset 也会将填充字节初始化为零。

我的问题是:

一般来说,用上面的方法1或2初始化会比方法3更快吗? 节省多少 CPU 周期并不重要,我只是好奇 1 和 2 是否比 3 快。


这是一个实施质量问题。

(BTW, in pure theory, an implementation might have a NULL pointer which is not an all zero bits word; for such cases the semantics of your §3 is different than those of §1 or §2; but in practice, most common processors today have a linear virtual address space and have their NULL pointer be a word of all zero bits)

Recent GCC编译器(至少在通常的 x86-64 处理器上),启用了优化(例如gcc -O2)可能会产生same(或非常相似)机器代码(因为memset扩展为__builtin_memset它被专门编译并经常内联),所以使用memset is not实践中速度较慢(由于矢量化甚至可能变得更快,例如AVX机器指令)

您可以查看使用例如生成的汇编代码gcc -S -fverbose-asm -O2 -march=native

(in some cases, notably when struct xyz has hundreds of fields, the compiler would even synthesize a call to memset for your case 1 and 2!)

一般来说,用上面的方法1或2初始化会比方法3更快吗?

在实践中,答案通常是否定的(所以更喜欢readable方法)。如果您非常关心,请对您的代码进行基准测试。

(don't forget that development time also costs money; in many cases your human time is worth more than the few CPU nanoseconds you might win, and generally won't)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

memset 的速度与直接赋值为零的速度 的相关文章

  • 用 C++ 进行服装建模 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在编写一些软件 最终会绘制一个人体框架 可以配置各种参数 并且计划是在假人身上放置某种衣服 我研究
  • std::cout 和 std::wcout 有什么区别?

    在c 中 有什么区别std cout and std wcout 它们都控制流缓冲区的输出或将内容打印到控制台 或者它们只是相似吗 它们作用于不同的字符类型 std cout uses char作为字符类型 std wcout uses w
  • 如何检查QProcess是否正确执行?

    QProcess process sdcompare QString command sdcompare QStringList args sdcompare command sdcompare diff args sdcompare lt
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 将内置类型转换为向量

    我的 TcpClient 类接受vector
  • 单元测试一起运行时失败,单独运行时通过

    所以我的单元测试遇到了一些问题 我不能只是将它们复制并粘贴到这里 但我会尽力而为 问题似乎是 如果我一项一项地运行测试 一切都会按预期进行 但如果我告诉它一起运行测试 则 1 5 将通过 TestMethod public void Obj
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 获取 WPF 控件的所有附加事件处理程序

    我正在开发一个应用程序 在其中动态分配按钮的事件 现在的问题是 我希望获取按钮单击事件的所有事件 因为我希望删除以前的处理程序 我尝试将事件处理程序设置为 null 如下所示 Button Click null 但是我收到了一个无法分配 n
  • 关于在 Windows 上使用 WiFi Direct Api?

    我目前正在开发一个应用程序 我需要在其中创建链接 阅读 无线网络连接 在桌面应用程序 在 Windows 10 上 和平板电脑 Android 但无关紧要 之间 工作流程 按钮 gt 如果需要提升权限 gt 创建类似托管网络的 WiFi 网
  • 上下文敏感与歧义

    我对上下文敏感性和歧义如何相互影响感到困惑 我认为正确的是 歧义 歧义语法会导致使用左推导或右推导构建多个解析树 所有可能的语法都是二义性的语言是二义性语言 例如 C 是一种不明确的语言 因为 x y 总是可以表示两个不同的事物 如下所述
  • 如何编写一个同时需要请求和响应Dtos的ServiceStack插件

    我需要提供本地化数据服务 所有本地化的响应 Dto 都共享相同的属性 IE 我定义了一个接口 ILocalizedDto 来标记那些 Dto 在请求端 有一个ILocalizedRequest对于需要本地化的请求 Using IPlugin
  • 等待线程完成

    private void button1 Click object sender EventArgs e for int i 0 i lt 15 i Thread nova new Thread Method nova Start list
  • 有人可以提供一个使用 Amazon Web Services 的 itemsearch 的 C# 示例吗

    我正在尝试使用 Amazon Web Services 查询艺术家和标题信息并接收回专辑封面 使用 C 我找不到任何与此接近的示例 所有在线示例都已过时 并且不适用于 AWS 的较新版本 有一个开源项目CodePlex http www c
  • C++ 密码屏蔽

    我正在编写一个代码来接收密码输入 下面是我的代码 程序运行良好 但问题是除了数字和字母字符之外的其他键也被读取 例如删除 插入等 我知道如何避免它吗 特q string pw char c while c 13 Loop until Ent
  • Process.Start() 方法在什么情况下返回 false?

    From MSDN https msdn microsoft com en us library e8zac0ca v vs 110 aspx 返回值 true 表示有新的进程资源 开始了 如果由 FileName 成员指定的进程资源 St
  • 如何在按钮单击时模拟按键 - Unity

    我对 Unity 中的脚本编写非常陌生 我正在尝试创建一个按钮 一旦单击它就需要模拟按下 F 键 要拾取一个项目 这是我当前的代码 在编写此代码之前我浏览了所有统一论坛 但找不到任何有效的东西 Code using System Colle
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • Linq-to-entities,在一个查询中获取结果+行数

    我已经看到了有关此事的多个问题 但它们已经有 2 年 或更长 的历史了 所以我想知道这方面是否有任何变化 基本思想是填充网格视图并创建自定义分页 所以 我还需要结果和行数 在 SQL 中 这将类似于 SELECT COUNT id Id N
  • 使用 GROUP 和 SUM 的 LINQ 查询

    请帮助我了解如何使用带有 GROUP 和 SUM 的 LINQ 进行查询 Query the database IEnumerable

随机推荐

  • 在Protege中使用枚举数据类型为个人定义属性值

    首先我想提一下 我在本体论和门生方面都是新手 我尝试使用 protege 5 0 开发本体 我用枚举范围定义了一些数据属性 这些属性在数据范围表达式中定义 如下所示 Balanced Clever Energetic Lazy Talkat
  • 如何为自定义实体提供多个条目?

    在我们的 Dynamics CRM 在线自定义项目中 我们有默认值活动名为的自定义实体中的选项卡DocProject s form 活动能够采取多个条目 另外 还有NOTES相同形式的选项卡 NOTES也能带多个条目 好的 这是由 Dyna
  • 通过 COM 或直接集成到 Java 中使用 .Net 库

    我不得不承认我最后一次用 Java 编程是在高中的数据结构课上 所以请善待这个 Java 菜鸟 我在工作中花费了大量时间来组装 C COM 库 该库严重依赖于一些新的 Net 技术 WPF 是最重要的技术 因此将其翻译成另一种语言并不是真正
  • 从 TCL 打开文件及其关联应用程序的最佳方式是什么?

    我在 Windows 上有一个 TCL TK 应用程序 使用关联程序打开文件的最佳方法是什么 例如 我正在生成一个 PDF 我希望它自动打开 我一直在使用 proc OpenDocument filename if catch exec r
  • 提取存档条目将创建一个位于指定目标目录之外的文件

    当尝试提取 jar 文件时 我不断收到 提取存档条目将创建一个位于指定目标目录之外的文件 谁能帮我 这是我的代码 try using ZipArchive archive ZipFile Open jarLocationTXT Text Z
  • 以编程方式设置 DataGridView 中 ComboBox 的选定索引

    我想在避免数据绑定的同时 在 DataGridView 的 ComboBox 中设置选定的索引 它未连接到数据库 我发现的所有解决方案都将 DataGridView 连接到数据库 但我没有 所以我无法解决问题 由于 DataGridView
  • Safari 颜色和边框半径

    我有2个div 我试图在顶部半透明 div 上打一个圆孔 以透视底部 div 这段代码运行良好 但在 safari 中不行 边界半径似乎打破了这一点 Safari 有解决方案吗 bg position absolute width 100
  • 改变matplotlib histogram2d的高度范围

    我正在尝试使用 matplotlib 的 histogram2d 绘制一些 2D 经验概率分布 我希望颜色在几个不同的图中具有相同的比例 但即使我知道结果分布的全局上限和下限 也找不到设置比例的方法 按原样 每个色标将从直方图箱的最小高度到
  • 如何在 cq 5.5 中配置 antisamy?

    我有 cq 5 5 项目 我想防止 XSS 攻击 根据这个linkcq 提供与 AntiSamy 项目的集成 请提供与 AntiSamy 集成的具体步骤 因为我真的找不到它 update 我应该在某个地方写这样的代码吗 import org
  • 在 asp.net-mvc 中,使用 Base ViewModel 在 Site.Master 页面上显示动态内容的最佳方式是什么

    我有一个 asp net mvc 站点 并且有一些我想在每个页面上显示的信息 我创建了一个名为 BaseViewModel 的类 每个 viewModel 类都继承自 BaseViewModel Site Master 视图直接绑定到 Ba
  • 通过邮寄方式将文件上传到服务器 OutOfMemory

    我正在开发一个远程备份应用程序 有时我需要上传大文件 例如 15 MB 我在一些手机上进行了测试 但出现内存不足错误 有没有办法使用此功能使用更少的内存 public int uploadFile String sourceFileUri
  • 在 k8s 集群中,我是否应该始终调用入口规则或节点端口服务名称?

    我有多个安心服务在我们的系统内 有些是我们的withinKubernetescluster Others are on legacy基础设施和托管在虚拟机上 我们的许多安心服务 make 同步调用彼此 所以不是异步使用消息队列 我们还有许多
  • 使用 mysql 按多列排序

    下面显示的是我需要的查询order by有了这三列 这是用于复杂的搜索列表 如果我使用其中之一 它就会完美地工作 但处理不止一个时 它无法正确排序 EDIT 其实我需要的是 优质唱片一定要排在第一位 而且喜欢的唱片也比较多 而且精英客户有更
  • WAMP重装后部分数据库内容消失

    我搞砸了 Apache 的配置文件 我在同一个文件夹中重新安装了 没有任何卸载 WAMP 但我没有安装 2 4 而是安装了 2 5 所以 WAMP 之后光荣地失败了 我无法再访问 WAMP 因此无法从 PHPMyAdmin 备份我的数据库
  • 实现时的问题:CSS 按钮中的活动

    我在使用 CSS 制作菜单时遇到问题 问题是我想使用 active 来突出显示我当前的按钮 但尝试了很多次之后 我仍然找不到如何在我的代码中实现它 I use li 里面有标签 a 标签以确保按钮背景和文本颜色在选择时发生变化 因为在尝试放
  • 缺少临时文件夹

    我正在 mac OSX 10 8 上使用内置的 apache 服务器和 php mysql 在 Moodle 2 4 上进行开发 我遇到的问题是 为什么我尝试上传任何内容 却收到错误消息 PHP 缺少临时文件夹 然后 我将实时副本下载到我的
  • cypress:如果元素 xpath 不存在,如何管理应用程序流程

    我有以下场景 如果该元素存在 我必须执行一项活动 如果不存在 我将执行另一项活动 cy xpath div text button its length then res gt if res gt 0 return 1 else cy lo
  • 为什么我不能使用 --target 和 --editable 调用 pip?

    我在用着 cd 我的包 pip install target 部署目录 准备在 Google App Engine 上部署的包 但为了在 dev appserver py 下进行测试 我想在开发模式下安装该包 即使用 editable 但是
  • Javascript - 正则表达式来验证日期格式[重复]

    这个问题在这里已经有答案了 有没有办法在 JavaScript 中使用正则表达式来验证多种格式的日期 例如 DD MM YYYY 或 DD MM YYYY 或 DD MM YYYY 等 我需要将所有这些都放在一个正则表达式中 但我不太擅长
  • memset 的速度与直接赋值为零的速度

    请考虑下面的结构定义 struct xyz char a void ptr uint16 t num1 uint32 t num2 uint64 t num3 我可以通过以下三种方式之一将此结构的实例初始化为零 申报时 struct xyz