c++ - 如何创建数组c ++的对齐数组?
问题描述
我想创建一个由其他数组组成的对齐数组。我知道怎么做std::vector<>
,但是向量的方法不适合我。
非常感谢那些能够帮助我的人。
这是我想做的一个例子:
for (int i = 0; i < 16; ++i)
std::cout << arr[i] << " ";
// Prints 0 1 2 3 4 5 6 7 8 9 10...15
int m = 5;
for (int i = 0; i < m ; ++i) {
float* varr[i] = (float*) aligned_alloc(32, sizeof(float)*8);
int k = i*8;
varr[i] = {arr[k+0], arr[k+1], arr[k+2], arr[k+3], arr[k+4], arr[k+5], arr[k+6], arr[k+7]};
}
varr[0] = {arr[0], arr[1], arr[2], arr[3], arr[4], arr[5], arr[6], arr[7]};
// Prints: 0 1 2 3 4 5 6 7
varr[1] = {arr[8], arr[9], arr[10], arr[11], arr[13], arr[14], arr[15], arr[16]};
// Prints: 8 9 10 11 12 13 14 15
varr[2] = .....;
varr[3] = .....;
varr[4] = .....;
解决方案
我不确定 avx 指令,但我修改后的方法是这样的:
int main (){
int dim1{5}, dim2{8};
float* varr = static_cast<float*> (aligned_alloc(sizeof(float)*dim1*dim2, sizeof(float)*dim1*dim2));
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
varr[i*dim2+j] =i*dim2 + j;
}
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
std::cout << &varr[i*dim2+j] << ",";
}
std :: cout << "\n";
}
return 0;
}
它基本上使用在一大块纯一维数组中分配/访问数组的逻辑
另一种方法是使用指向如下指针的指针:
#include <iostream>
int main (){
int dim1{5}, dim2{8};
float** varr = static_cast<float**> (aligned_alloc(sizeof(float*)*dim1, sizeof(float*)*dim1));
for(int i=0; i<dim1; ++i){
varr[i] = static_cast<float*> (aligned_alloc(sizeof(float)*dim2, sizeof(float)*dim2));
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
varr[i][j] = 0.1 + static_cast<float>(i*dim2 + j);
}
}
for (int i = 0; i < dim1 ; ++i) {
for (int j = 0; j < dim2; ++j) {
std::cout << &varr[i][j] << ",";
}
std :: cout << "\n";
}
return 0;
}
但是这个问题是内存没有在第一个维度上对齐,dim1
.
推荐阅读
- reactjs - 第 3:13 行:在 React.js 中使用 Chartjs-2 时定义了“缩放”但从未使用过 no-unused-vars
- reactjs - 如何重新渲染或多次调用屏幕反应原生
- r - ggplot - 在一张图上绘制多个 sin 函数
- c# - ASP.NET Core 3.1 Azure AD 身份验证引发 OptionsValidationException
- javascript - 使用javascript将参数添加到url
- reactjs - 什么是我的 web 应用程序识别可能有许多同时查看者的页面的第一个访问者的好方法,即使他/她刷新页面
- github - 无法推送到github中的远程存储库
- ios - 颤振:无法构建 ios(xcode 问题,pod 问题?)
- python - Python Pandas:返回与另一个数据帧中的两列匹配的数据帧中的所有值
- regex - 正则表达式匹配无限的一个字符,但只有两个另一个