gpt4 book ai didi

c++ - 初始化 POD 数组中的第一个元素,保留其余元素未初始化

转载 作者:行者123 更新时间:2023-11-30 03:41:58 24 4
gpt4 key购买 nike

我正在处理关键路径上的函数。代码如下所示:

void ProcessData(const byte* input, size_t size)
{
ALIGN_ARRAY(16) int32_t m0[2] = { ((const int32_t*)input)[0] };
ALIGN_ARRAY(16) int32_t m1[2] = { ((const int32_t*)input)[1] };
...
}

第一个元素,m0[0] 是我关心的。第二个元素 m0[1] 是暂存空间,它在 m 被传送到 SIMD 引擎之前保持对齐。 m0[1] 将填充一个值,但我不需要对其进行初始化。

这段代码被反复调用并且对基准测试结果影响很大,所以尽量减少一切很重要。我希望编译器知道它可以初始化第一个元素,因为代码可能会得到更好的优化。

如何确保只初始化第一个元素,而数组中的其余元素未初始化?有可能吗?


这个问题与类似 Initialization of a normal array with one default value 的问题相反, Static array initialization of individual elements in C++Array initialization with {0}, {0,}?

我也知道初始化不同于赋值;以及 zero-, default- and value-initialization 的一些细节以及 POD 如何影响它。

最佳答案

不确定输入的是什么,尤其是因为它具有字节类型并且您正在转换为 int32。如果您在 x86 平台上,请注意反向词(字节顺序问题)。

尝试这样的事情,但要使用适当的类型转换。

void ProcessData(const byte* input, size_t size)
{
ALIGN_ARRAY(16) int32_t m0[2];
m0[0]= = (const int32_t*)input)[0];
ALIGN_ARRAY(16) int32_t m1[2];
m1[0] = (const int32_t*)input)[1];
...
}

关于c++ - 初始化 POD 数组中的第一个元素,保留其余元素未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087938/

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