有没有办法有一个位桶指针?
许多 IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。有没有一种技巧或方法来制作一个排序位桶指针,所以我可以接受任何数量的数据,这些数据将被丢弃。做类似“char tmp[INT_MAX]”的事情很疯狂。我正在寻找的行为类似于 /dev/null,仅在指针世界中。
不要对此抱有希望....只是好奇。
谢谢,陈兹
更新:也许 mmap-ing /dev/null。问这个问题的时候忘记了。
有没有办法有一个位桶指针?
许多 IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。有没有一种技巧或方法来制作一个排序位桶指针,所以我可以接受任何数量的数据,这些数据将被丢弃。做类似“char tmp[INT_MAX]”的事情很疯狂。我正在寻找的行为类似于 /dev/null,仅在指针世界中。
不要对此抱有希望....只是好奇。
谢谢,陈兹
更新:也许 mmap-ing /dev/null。问这个问题的时候忘记了。
你用的是哪个IO接口?如果它是基于 FILE 的方法(fopen、fread 等),您可以继续读取同一个缓冲区并忽略其内容。你可以在 C/C++ 中做任何事情,所以你想要的当然是可能的,但是你想要做什么并不完全清楚。也许发布一些代码?
If it's a file, you can skip data by seeking. mmaping /dev/null WILL allocate and consume memory when the memory area is written to. In any case, it's not really clear what you're trying to do.
我想只是堆栈上的一个临时数组可以读取虚拟数据。尝试一些复杂的方法可能会使 CPU 缓存失效并降低性能。
许多 IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。
通常,该大小要么很小,要么是用户指定的。
如果是预定义的小尺寸,则在堆栈上分配缓冲区并忽略结果。
如果您指定大小,请查看大小指定为零是否会导致缓冲区被忽略。如果是这样,那就去做吧。如果没有,分配一些小缓冲区并(如有必要)重复调用该函数以通过它刷新所有不需要的数据。
也许,写函数的作者并要求允许一个 NULL 缓冲区指针也是一个好主意。
您可以将单个分配的页面映射到一堆连续的虚拟地址。但是,如果您将指针增加足够多的次数,它最终会从末端脱落。没有办法解决这个问题,如果增量足够,您提供的任何指针最终都会指向重要的东西。
如果您调用的 API 接受迭代器而不是指针,您的状态会更好,因为您可以使迭代器的递增成为无操作。
也许你可以寻找你想去的地方。
我想出的唯一方法是编写某种系统调用,将程序中的所有虚拟内存切换到另一个伪程序虚拟内存空间。但是伪内存空间将是只写的,从不存储。然后,当您完成写入“NULL 指针”时,您将切换回虚拟内存空间。
例子:
main()
{
int fd = open("file", O_RDONLY);
null_vm();
read(fd, NULL, UINT_MAX);
unnull_vm();
close(fd);
return;
}
谢谢,陈兹