Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 普通阵列可以放入cpu寄存器吗?_C++_C++11_Cpu Registers - Fatal编程技术网

C++ 普通阵列可以放入cpu寄存器吗?

C++ 普通阵列可以放入cpu寄存器吗?,c++,c++11,cpu-registers,C++,C++11,Cpu Registers,在以下情况下,普通数组(arr)能否放入cpu寄存器中: int arr[6] {/*some values*/}; const auto lambda_f = [arr](int input) {/*some manipulations on array elements and input*/}; // further usage of lambda_f 如果不能,我应该如何重写代码使之成为可能 编辑:当然,我指的是lambda中数组的副本。在大多数平台上,int[6]的信息太多,无法放在

在以下情况下,普通数组(
arr
)能否放入cpu寄存器中:

int arr[6] {/*some values*/};
const auto lambda_f = [arr](int input) {/*some manipulations on array elements and input*/};
// further usage of lambda_f
如果不能,我应该如何重写代码使之成为可能


编辑:当然,我指的是lambda中数组的副本。

在大多数平台上,
int[6]
的信息太多,无法放在单个寄存器中,当然,您可以将指针放在适合容纳指针的寄存器中的数组中。或者,如果您想询问数组的内容是否可以存储在某组寄存器中,那么这是可能的

但这完全取决于数据的使用方式,以及编译器是否认为寄存器对其他数据更有价值。如果我可以假设您发布的代码实际上在一个函数块中,那么任何优化编译器都会完全忽略您发布的代码,并将
arr
lambda\u f
都去掉,因为您从未使用过它们


确定答案的唯一方法是在使用
lambda_f
的特定实际代码上进行测试,并检查生成的程序集。

在大多数平台上,
int[6]
的信息太多,无法放在单个寄存器中,当然,您可以将指针放入适合保存指针的寄存器中的数组中。或者,如果您想询问数组的内容是否可以存储在某组寄存器中,那么这是可能的

但这完全取决于数据的使用方式,以及编译器是否认为寄存器对其他数据更有价值。如果我可以假设您发布的代码实际上在一个函数块中,那么任何优化编译器都会完全忽略您发布的代码,并将
arr
lambda\u f
都去掉,因为您从未使用过它们


确定答案的唯一方法是在确实使用lambda_f的特定实际代码上进行试验,并检查生成的程序集。

一般来说,是的。但这取决于特定的平台。如果您使用的是最新的Intel x86-64芯片,它将具有对256位(32字节)整数进行运算的“AVX2”指令

您的
int-arr[6]
是4*6=24字节,因此它将适合于单个AVX寄存器,然后您可以在其上使用AVX2整数指令。您只需要忽略寄存器的额外8字节,但这通常不是问题

如果您需要支持较旧的处理器,可以改用SSE2,这将适用于大多数现代ish x86系统。但一次只能操作128位(4整数)


第一步是将数据加载到宽寄存器中。例如,请参见此处:

一般来说,是的。但这取决于特定的平台。如果您使用的是最新的Intel x86-64芯片,它将具有对256位(32字节)整数进行运算的“AVX2”指令

您的
int-arr[6]
是4*6=24字节,因此它将适合于单个AVX寄存器,然后您可以在其上使用AVX2整数指令。您只需要忽略寄存器的额外8字节,但这通常不是问题

如果您需要支持较旧的处理器,可以改用SSE2,这将适用于大多数现代ish x86系统。但一次只能操作128位(4整数)

第一步是将数据加载到宽寄存器中。有关示例,请参见此处: