C++ 什么是连续副本?为什么要这样实施呢?
什么是连续副本?它与深拷贝和浅拷贝不同吗 根据下的wiki条目,它传统上实现为: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? 然后它做了个记录,说 请注意,到不
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缓冲区的副本。设备的硬件缓冲区。我开始理解这一点。你能详细说明一下吗?