2010-04-25 79 views
3

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

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

不希望在这....只是好奇。

感谢, Chenz

UPDATE:也许-ING MMAP的/ dev/null的。当我问这个问题时忘记了这一点。

+0

你到底有什么问题,通过实施该技术的解决 – 2010-04-25 16:20:22

+0

考虑一下这句话的真正含义要调用系统函数,那不是活得?这个API必须定义为接受一个32位或者64位的值,这个值表示函数将要写入的RAM的地址,OS函数已经被编译,写入就绪有两种可能的选项:写入工作(不是bitbucket)或失败(页面错误,昂贵) – MSalters 2010-04-26 12:25:13

回答

2

您正在使用哪个IO接口?如果它是基于FILE的方法(fopen,fread等),您可以继续阅读相同的缓冲区并忽略其内容。你可以在C/C++中做任何事情,所以你想要的东西肯定是可能的,但是你试图做什么并不完全清楚。也许发布一些代码?

+0

其实不,你不能用C或C++做任何事情。具体而言,您无法重新连接硬件,这就是创建无限长缓冲区所需的内容,该缓冲区不会覆盖有效内存。 – 2010-04-26 17:34:04

1

我想象的只是一个临时阵列堆栈正确读取虚拟数据。尝试一些精心制作的方法可能会使CPU缓存失效并降低性能。

1

如果是文件,可以通过查找跳过数据。当写入内存区域时,mmaping/dev/null将分配并消耗内存。无论如何,你想要做什么并不是很清楚。

0

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

通常这个尺寸是小的或用户指定的。

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

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

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

0

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

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

0

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

0

我想出的唯一方法是编写某种系统调用,将程序中的所有虚拟内存切换到另一个虚拟内存空间。但是,伪存储器空间只能写入,不能存储。然后,当您写完“NULL指针”时,您将切换虚拟内存空间。“

例子:

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

感谢, Chenz

相关问题