如果你不得不转换
unsigned short data1[32]
到
unsigned char* data2
紧密循环执行1000万次
你会用什么功能来获得最佳性能?
我正在使用这个
reinterpret_cast<unsigned char*>(data1);
但是想知道是否有更好的方法
答案 0 :(得分:6)
reinterpret_cast
是性能寻求编码器的圣杯,即导致零时钟周期的代码。
答案 1 :(得分:2)
使用reinterpret_cast
或(unsigned char*)
进行投射不会输出任何汇编指令。因此没有时间损失。
答案 2 :(得分:2)
reinterpret_cast不生成任何代码。它只是转换编译器如何处理寄存器或内存中的数据。没有比这更好的方法了。
答案 3 :(得分:1)
投射不是词法转换。
您可能需要使用itoa
之类的函数,或者如果Windows依赖项已经用完,您可以使用boost::lexical_cast
取决于您的目标,不确定自己的最快或最佳方式。
编辑:响应OP的评论,此数据为UTF-8字符串。
reinterpret_cast
是不够的,我的原始回答也不充分。您需要使用正确的编码来转换字符串。 UTF-8的字符0-127兼容为单字节字符,相当于ANSI(即41是'A')
然而,除此之外的任何事情都需要转换。对于超过127的字符,UTF-8可以使用2-6个字节来支持扩展语言的存储。
答案 4 :(得分:0)
在大多数情况下,类型是编译器的概念而不是机器代码。
将字节解释为特定类型只是机器代码指令在某些地址所期望的问题。
将类型转换为另一个类型(除dynamic_cast
之外)不会生成任何实际代码。例外情况是在同一层次结构中的类型之间进行转换时,在这种情况下,转换可能会产生指针偏移。