c – 什么是串行副本?为什么它这样实现?

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

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

do {                //count > 0 assumed
    *to = *from++;  //Note that the 'to' pointer is NOT incremented
} while(--count > 0);

然后它做了一个说明,说

Note that to is not incremented because Duff was copying to a single memory-mapped output register.

我真的不明白这个说明.

如果指针没有递增,那么循环的重点是什么?为什么然后它被实现为:

*to = from[count-1]; //does it not do the same thing?

我怀疑它与串行副本的定义有关.

我们如何分配内存以使循环产生一些差异?

解决方法

这种复制的关键在于它不是普通存储器,而是串行寄存器.

因此,每次对寄存器(to)的地址进行写操作时,与寄存器相关联的硬件将执行类似于通过串行链路发送位的操作,或者将它们推送到队列以供其他一些硬件处理.

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

相关文章

对象的传值与返回说起函数,就不免要谈谈函数的参数和返回值...
从实现装饰者模式中思考C++指针和引用的选择最近在看...
关于vtordisp知多少?我相信不少人看到这篇文章,多半是来自...
那些陌生的C++关键字学过程序语言的人相信对关键字并...
命令行下的树形打印最近在处理代码分析问题时,需要将代码的...
虚函数与虚继承寻踪封装、继承、多态是面向对象语言的三大特...