有没有办法有一个桶指针? (C / C ++)

时间:2010-04-25 13:56:46

标签: c++ c pointers system-calls bitbucket

有没有办法获得一个桶指针?

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

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

谢谢, Chenz

更新:也许是mmap-ing / dev / null。当我问这个问题时忘了这个。

7 个答案:

答案 0 :(得分:2)

您使用的是哪个IO接口?如果它是基于FILE的方法(fopen,fread等),你可以继续读入同一个缓冲区并忽略其内容。你可以用C / C ++做任何事情,所以你想要的东西当然是可能的,但你想要做的并不完全清楚。也许张贴一些代码?

答案 1 :(得分:1)

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

答案 2 :(得分:1)

如果是文件,您可以通过搜索跳过数据。 mmaping / dev / null将在写入内存区域时分配和使用内存。无论如何,你真正想要做的事情并不是很清楚。

答案 3 :(得分:0)

  

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

通常该尺寸很小或是用户指定的。

如果是预定义的小尺寸,请在堆栈上分配缓冲区并忽略结果。

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

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

答案 4 :(得分:0)

您可以将单个已分配的页面映射到一堆连续的虚拟地址。但是,如果你将指针增加足够的次数,它最终将会结束。没有解决这个问题,你提供的任何指针最终会指向重要的东西,如果增量足够的话。

如果您正在调用的API接受迭代器而不是指针,那么您的状态会更好。因为您可以使迭代器递增为无操作。

答案 5 :(得分:0)

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

答案 6 :(得分:0)

我提出的唯一方法是编写某种系统调用,将程序中的所有虚拟内存切换到另一个伪程序虚拟内存空间。但伪造的内存空间只能写入并且永远不会存储。然后,当你写完“空指针”时,你就会把虚拟内存空间切换回来。

示例:

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

谢谢, Chenz