如何使用多维数组映射原始缓冲区?

问题描述

我想了解在软件中映射硬件缓冲区的最佳实践。

假设我的连续缓冲区的映射为:

+--------+  <- myPtr
|  128b  | #0
+--------+
|  128b  | #1
+--------+
|  128b  | #2
+--------+
|  128b  | #3
+--------+

在C ++中,我将使用:

void *myPtr;
uint8_t (*buffer)[16][4]=nullptr;

myPtr = mmap(/*..*/);
buffer = static_cast<uint8_t (*)[16][4]>(myPtr);

我可以使用buffer[0] ... buffer[3]选择四个子缓冲区之一。

现在让我们说我想为32b分配缓冲区#1的64b / 8B偏移量,我可以这样做:

uint32_t value=4546954;
*buffer[1][8] = value;
  • bufferbuffer->data的地址是否相同?
  • 是否有更好的方法来映射void* ptr中的数据?

我想避免使用指针算术,让编译器完成工作并为我检查它可以检查的所有内容

我专门针对 x86-64 cpu(英特尔)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)