C++ 有没有一种方法可以获得一个位桶指针?(C/C+;+;)
有没有一种方法可以获得一个位桶指针 许多IO(特别是与输入相关的)系统调用将数据返回到特定大小的缓冲区。是否有一个技巧或方法来生成一个排序位的桶指针,这样我就可以接受任何数量的将被丢弃的数据。做一些像“chartmp[INT_MAX]”这样的事情是疯狂的。我正在寻找的行为类似于/dev/null,只是在指针世界中 对此不抱希望。。。。只是好奇 谢谢, 钦茨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、
更新:可能是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++中你不能做任何事情。具体地说,您不能重新布线硬件,这就是创建不重叠有效内存的无限长缓冲区所需的。