Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是连续副本?为什么要这样实施呢?_C++_Memory Mapping - Fatal编程技术网

C++ 什么是连续副本?为什么要这样实施呢?

C++ 什么是连续副本?为什么要这样实施呢?,c++,memory-mapping,C++,Memory Mapping,什么是连续副本?它与深拷贝和浅拷贝不同吗 根据下的wiki条目,它传统上实现为: do { //count > 0 assumed *to = *from++; //Note that the 'to' pointer is NOT incremented } while(--count > 0); *to = from[count-1]; //does it not do the same thing? 然后它做了个记录,说 请注意,到不

什么是连续副本?它与深拷贝和浅拷贝不同吗

根据下的wiki条目,它传统上实现为:

do {                //count > 0 assumed
    *to = *from++;  //Note that the 'to' pointer is NOT incremented
} while(--count > 0);
*to = from[count-1]; //does it not do the same thing?
然后它做了个记录,说

请注意,
不会递增,因为达夫正在复制到单个内存映射输出寄存器

我真的不明白这张纸条

如果
to
指针未递增,则循环的点是什么?那么,为什么它被实施为:

do {                //count > 0 assumed
    *to = *from++;  //Note that the 'to' pointer is NOT incremented
} while(--count > 0);
*to = from[count-1]; //does it not do the same thing?
我怀疑这与序列拷贝的定义有关

我们如何将
的内存分配给
,使循环产生一些不同?


某些平台具有特殊地址,当您对其进行读/写操作时,系统将执行一些I/O操作。例如,
to
可能是一个在写入时控制扬声器的地址。在这种情况下,环路将能够播放声音,而
*to=来自[count-1]
不会提供任何有用的输出。

这种拷贝的意义在于它不是针对普通内存,而是针对串行寄存器

因此,每次对寄存器的地址进行写入(
),与寄存器相关联的硬件将执行类似的操作,如通过串行链路发送位,或将位推送到队列中,以便其他硬件处理


通常,您甚至无法像这样读取寄存器地址,因此它们与普通的
内存非常不同,最好将其视为恰好位于内存地址的特定硬件的接口。

此处的
指针是“特殊的”。在某些硬件上,您可以通过写入特殊内存区域来访问IO端口。如果您想通过IO端口发送位模式,而该模式已经存在于内存中,那么您可以这样做

每次写入<代码>到
都会导致IO端口的输出通常发生更改。这用于迭代模式并将其写入“特殊”内存


如何访问这种“特殊”内存是非常平台和实现特定的。有时,这只是一个始终写入固定地址的问题——通常,某些平台头会提供一个
#define
或类似文件,以便在编译时向您提供该信息。有时,您需要进行一个系统调用,告知您感兴趣的特定设备的映射地址。

可能是FIFO缓冲区的副本。设备的硬件缓冲区。我开始理解这一点。你能详细说明一下吗?