使用MemSet(…)合法吗, 0, …)在一系列的双打上? [英] Is it legal to use memset(…, 0, …) on an array of doubles?

查看:16
本文介绍了使用MemSet(…)合法吗, 0, …)在一系列的双打上?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

将Double数组(使用memset(…, 0, …))或包含Double的结构的内存清零合法吗?

这个问题意味着两件不同的事情:

  1. 从C标准的角度看:这是NOT的未定义行为吗?(我认为,在任何特定的平台上,这都不可能是未定义的行为,因为它只是取决于内存中浮点数的表示形式--仅此而已。)

  2. 从实际角度看:在英特尔平台上可以吗?(不管标准是什么。)

推荐答案

C99标准附件F规定:

本附件指定了对IEC 60559浮点标准的C语言支持。这个 IEC 60559浮点标准是专门用于以下目的的二进制浮点算法 微处理器系统,第二版(国际电工委员会60559-1989年),以前指定 IEC 559:1989和AS二进制浮点算术的IEEE标准 (ANSI/IEEE754−1985年)。IEEE基数无关浮点标准 算法(ANSI/IEEE854−1987)概括了要删除的二进制标准 依赖于基数和字长。IEC 60559一般指的是浮点 标准,如在IEC 60559操作、IEC 60559格式等中 定义__STDC_IEC_559__应符合本附件中的规范。哪里 指示了C语言和IEC 60559之间的绑定,指定了IEC 60559 除非另有说明,否则行为以引用方式采用。

和紧随其后:

C浮点类型与IEC 60559格式匹配如下:

  • float类型与IEC 60559单一格式匹配。
  • double类型与IEC 60559双格式匹配。

因此,由于IEC 60559基本上是IEEE754-1985,并且由于这指定8个零字节表示0.0(正如@David Heffernan所说),这意味着如果您发现__STDC_IEC_559__已定义,您可以使用memset安全地执行0.0初始化。

这篇关于使用MemSet(…)合法吗, 0, …)在一系列的双打上?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆