C++ 有没有一种方法可以获得一个位桶指针?(C/C+;+;)

C++ 有没有一种方法可以获得一个位桶指针?(C/C+;+;),c++,c,pointers,system-calls,bitbucket,C++,C,Pointers,System Calls,Bitbucket,有没有一种方法可以获得一个位桶指针 许多IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。是否有一个技巧或方法来生成一个排序位的桶指针,这样我就可以接受任何数量的将被丢弃的数据。做一些像“chartmp[INT_MAX]”这样的事情是疯狂的。我正在寻找的行为类似于/dev/null,只是在指针世界中 对此不抱希望。。。。只是好奇 谢谢, 钦茨 更新:可能是mmap-ing/dev/null。当我问这个问题时,我忘记了这一点。您使用的是哪个IO接口?如果是基于文件的方法(fopen、

有没有一种方法可以获得一个位桶指针

许多IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。是否有一个技巧或方法来生成一个排序位的桶指针,这样我就可以接受任何数量的将被丢弃的数据。做一些像“chartmp[INT_MAX]”这样的事情是疯狂的。我正在寻找的行为类似于/dev/null,只是在指针世界中

对此不抱希望。。。。只是好奇

谢谢, 钦茨


更新:可能是mmap-ing/dev/null。当我问这个问题时,我忘记了这一点。

您使用的是哪个IO接口?如果是基于文件的方法(fopen、fread等),您可以继续读取相同的缓冲区并忽略其内容。你可以在C/C++中做任何事情,所以你想要的当然是可能的,但是你想做什么还不完全清楚。也许会发布一些代码?

我可以想象堆栈上的临时数组可以读取虚拟数据。尝试一些复杂的方法可能会使CPU缓存失效并降低性能。

如果是文件,可以通过查找跳过数据。mmaping/dev/null将在写入内存区域时分配和消耗内存。在任何情况下,都不清楚你想做什么

许多IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区

通常,该大小不是很小就是用户指定的

如果是预定义的小大小,则在堆栈上分配缓冲区并忽略结果

如果指定大小,请查看大小规格为零是否会导致忽略缓冲区。如果是这样,就去做。如果没有,则分配一些小的缓冲区,并(如有必要)重复调用该函数以刷新所有不需要的数据


也许,编写函数的作者并要求允许空缓冲区指针也是一个好主意。

您可以将单个分配的页面映射到一组连续的虚拟地址。但是如果你增加指针足够的次数,它最终会从末端掉下来。无法回避这一点,如果增量足够大,您提供的任何指针最终都会指向一些重要的东西


如果您调用的API接受迭代器而不是指针,您的状态会更好,因为你可以不增加迭代器。

也许你可以找到你想要去的地方。

我想到的唯一方法是编写某种系统调用,将一个程序中的所有虚拟内存切换到另一个psuedo程序虚拟内存空间。但是psuedo内存空间将是只写的,从不存储。然后,在完成对“空指针”的写入后,将虚拟内存空间切换回原来的位置

例如:

  main() 
  {
    int fd = open("file", O_RDONLY);
    null_vm();
    read(fd, NULL, UINT_MAX);
    unnull_vm();
    close(fd);
    return;
  }
谢谢,
Chenz

你试图通过实施这一技术来解决什么问题?考虑一下这句话的真正含义。您调用的是系统功能,不一定是C或C++。API通常定义为接受32或64位的值,表示函数将写入的RAM中的地址。操作系统函数已编译,写入操作已就位。有两种可能的选择:要么写Work(不是BIT Bu桶),要么失败(页面错误,昂贵),实际上没有,在C或C++中你不能做任何事情。具体地说,您不能重新布线硬件,这就是创建不重叠有效内存的无限长缓冲区所需的。