有没有办法获得一个桶指针?
许多IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。是否有一个技巧或方法来制作一个排序桶指针,所以我可以接受任何数量的将被丢弃的数据。做一些像“char tmp [INT_MAX]”这样的事情很疯狂。我正在寻找的行为类似于/ dev / null,仅在指针世界中。
对此不抱希望....只是好奇。
谢谢, Chenz
更新:也许是mmap-ing / dev / null。当我问这个问题时忘了这个。
答案 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