c++ - 如何将巨大的头部分配数组设置为特定的 float C++

标签 c++ memset

首先,我使用Intel Math Kernel Library API分配了巨大的块内存。之后,我想将此数组设置为特定值,例如1234.5678。我计划使用void* memset( void* dest, int ch, std::size_t count );函数,但似乎该函数只能设置int值。我可以使用简单的for循环来解决此问题。但是,我认为使用for loop为如此大的块设置初始值不是很有效。所以我的问题是

  • 是否有另一种不用for loop来初始化如此大的块内存的方法
  • 最佳答案

    您可以使用 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
    

    关于c++ - 如何将巨大的头部分配数组设置为特定的 float C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62305053/

    相关文章:

    c - 是什么导致了这个 memset() 中的段错误?

    c++ - 在类声明中使用参数启动类

    php 与正在运行的 c++ 交互

    C++ protobuf 如何设置嵌套结构的值

    c++ - 在 C++ 中导出没有基类的父类

    c - 如何使用 C 中的 memset 将随机数量的随机小写字符设置为 Struct 成员

    c++ - 如何在 native 事件中创建 OpenGL ES 2 上下文?

    c - 二进制补码表示是否普遍与平台无关?

    c - 使用 C 动态存储文件中的信息

    c++ - 我可以在所有 true/all false 之间合法地 memset bools 结构吗?