问题描述
我想了解在软件中映射硬件缓冲区的最佳实践。
假设我的连续缓冲区的映射为:
+--------+ <- 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;
-
buffer
和buffer->data
的地址是否相同? - 是否有更好的方法来映射
void* ptr
中的数据?
我想避免使用指针算术,让编译器完成工作并为我检查它可以检查的所有内容。
我专门针对 x86-64 cpu(英特尔)。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)