如何将重复图案复制到内存缓冲区中?
|
我想将重复的字节模式写入内存块。我的想法是编写模式的第一个示例,然后将其复制到缓冲区的其余部分。例如,如果我以此开始:
ptr: 123400000000
之后,我希望它看起来像这样:
ptr: 123412341234
我以为我可以用memcpy
来写相交的区域,像这样:
memcpy(ptr + 4, ptr, 8);
该标准未指定复制将以什么顺序进行,因此,如果某些实现使它以相反的顺序进行复制,则可以给出不同的结果:
ptr: 123412340000
甚至合并结果。
有什么解决方法可以让我仍然使用memcpy
,还是必须实现自己的for循环?请注意,我不能使用memmove
,因为它恰好可以避免。它使ptr为123412340000
,而我要为123412341234
。
我为Mac / iPhone(clang编译器)编程,但是一般的回答也可以。
没有找到相关结果
已邀请:
6 个回复
疏腔傻小雹
函数系列来获取固定大小的图案;如果您需要更改尺寸,则必须自己滚动。
请注意,
,
和
仅在Mac OS / iOS上存在,因此请勿将它们用于跨平台开发。 否则,滚动(跨平台)函数进行逐字节复制非常简单。
很缴
扇献隙
这将适用于任何类型的val;字符,短裤,整数,int64_t等
蹄渭信妥扳
页面上: 如果在重叠的对象之间进行复制,则行为是不确定的。 无论如何,您都必须使用
。这是因为使用
的结果在任何方面都不可靠。 与实际问题相关的位 您要的是
,表示从
复制8个字节并将其放在at22ѭ处。
是123400000000,前8个字节是1234000,因此它是这样做的:
您需要致电:
实现您的追求。或实施等效方法。应该这样做,但是未经测试,等效于memcpy;您将需要添加额外的临时缓冲区或使用两个不重叠的内存区域。
壬驴拿歪竞
我进行基准测试;对于大量的ѭ30as,它的速度与常规ѭ29as一样快,而ѭ31dynamic则非常动态,而且性能损失也不多。
雄鞋谋塘