作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试mmap
一 block 内存,然后使用指针算法将其视为一个数组。 mmaped 区域的大小将由应用程序更改,因为可能会传递不同的大小和数据类型。到目前为止,这是我所做的工作,但是,我认为可能有更好的方法。
#include <iostream>
#include <sys/mman.h>
int main(int argc, char** argv) {
int num_ints = 10;
int num_bytes = num_ints * sizeof(int);
void *base = mmap(0, num_bytes, PROT_READ | PROT_WRITE,
MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
// Ugly way
for(int i = 0; i < num_ints; i++)
{
*((int *) base + i) = i;
std::cout << *((int *) base + i) << " " << ((int *) base + i) << std::endl;
}
std::cout << std::endl;
// A better way
int *ptr = (int *) base;
for(int i = 0; i < num_ints; i++)
{
*(ptr + i) += i;
std::cout << *(ptr + i) << " " << (ptr + i) << std::endl;
}
// What I'm looking is base[i] = i; which leads to
// warning: pointer of type 'void *' used in arithmetic [-Wpointer-arith]
// error: 'void*' is not a pointer-to-object type
munmap(base, num_bytes);
return(0);
}
对于更简洁的实现方法有什么建议吗?
最佳答案
真的没有多少了,是吗?
关于缩短它的唯一方法是 std::iota(ptr, ptr+num_ints, 0)
.在这里对你帮助不大,因为你仍然有用于打印目的的循环。
一种更工业化的方法是将逻辑包装在类模板中,类似于 std::array<T, n>
.这可能会将您的程序变成
int main(int argc, char** argv)
{
mmarray<int,10> ints;
std::iota(begin(ints), end(ints), 0);
for(int i: ints) std::cout << i << '\n';
}
管道隐藏在构造函数、析构函数中,begin
和 end
方法。
关于c++ - mmap的简明指针算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51727202/
网格布局是由一系列水平及垂直的线构成的一种布局模式,使用网格,我们能够将设计元素进行排列,帮助我们设计一系列具有固定位置以及宽度的元素的页面,使我们的网站页面更加统一。 一个网格通常具有许多的
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 8 年前。
我有大量字符串要转换为整数。在 Python 3.7 中执行列表字典查找的最简洁方法是什么? 例如: d = {'frog':1, 'dog':2, 'mouse':3} x = ['frog', '
我是一名优秀的程序员,十分优秀!