gpt4 book ai didi

c++ - 分配的数组已归零

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:00:47 26 4
gpt4 key购买 nike

在 C++11 中,当我使用 T *array = new T[n]; 分配一个动态数组时,它已经归零(使用 gcc 4.7.2,Ubuntu 12.10 64 位)。

  1. 这是 C++11 规范强制要求的吗?
  2. 如何在不清零元素的情况下分配数组?这应该会快一点。

编辑:我已经检查过 T = int

gcc cxx-flags:-std=gnu++11 -O3 -ffast-math -fno-rtti

最佳答案

§ 5.3.4

If the new-initializer is omitted, the object is default-initialized (8.5); if no initialization is performed, the object has indeterminate value.

new-initializer 是new T[] ()中的(),你省略了。

§ 8.5/6

To default-initialize an object of type T means:

— if T is a (possibly cv-qualified) class type (Clause 9), the default constructor for T is called (and the initialization is ill-formed if T has no accessible default constructor);

— if T is an array type, each element is default-initialized;

— otherwise, no initialization is performed.

int[] 是默认初始化的 -> 每个元素都是默认初始化的。

“这是 C++11 规范强制执行的吗?”:“不执行初始化”,所以不,如果 T 没有归零构造函数(即 T 是 POD),则不会强制归零。对于 T=int,无需执行归零操作。

为什么它仍然是零?如果您的程序从操作系统分配新内存,操作系统会为您清零新内存。如果您可以读取另一个可能存储敏感数据的程序的内存,那将是非常危险的。但是,如果您写入该内存,释放它并再次分配其中的一些内存,则不应将其置零。

关于c++ - 分配的数组已归零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13593165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com