首页 > 解决方案 > 如何将一个巨大的头部分配数组设置为特定的浮点数 C++

问题描述

起初,我使用英特尔数学内核库 API 分配了一个巨大的块内存。之后,我想将此数组设置为特定值,例如 1234.5678。我打算用这个void* memset( void* dest, int ch, std::size_t count );函数,但是这个函数好像只能设置int值。我可以使用简单的 for 循环来解决这个问题。for loop但是,我认为为这么大的块设置初始值并不是很有效。所以我的问题是

  1. 我是否有另一种方法来初始化如此巨大的块内存而不使用for loop

标签: c++memset

解决方案


您可以使用std::fill_n为数组的每个值分配一个值

#include <algorithm>

std::fill_n(data, count, 1234.5678);

请注意,即使您使用原始 for 循环,许多编译器也会生成相同的代码

for (std::size_t i = 0; i < count; ++i)
{
    data[i] = 1234.5678;
}

请参阅此Compiler Explorer示例,在上述两种情况下都会生成相同的汇编代码

void fill_a(double *,unsigned __int64) PROC                         ; fill_a
$LN14:
        sub     rsp, 8
        test    rdx, rdx
        je      SHORT $LN6@fill_a
        mov     QWORD PTR [rsp], rdi
        mov     rax, 4653144502051863213      ; 40934a456d5cfaadH
        mov     rdi, rcx
        mov     rcx, rdx
        rep stosq
        mov     rdi, QWORD PTR [rsp]
$LN6@fill_a:
        add     rsp, 8
        ret     0

推荐阅读