which of the two is faster: ?
1.
char* _pos ..;
short value = ..;
*((short*)_pos = va;
2.
char* _pos ..;
short value = ..;
memcpy(_pos, &value, sizeof(short));
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
As with all “which is faster?” questions, you should benchmark it to see for yourself. And if it matters, then ask why and pick which you want.
In any case, your first example is technically undefined behavior since you are violating strict-aliasing. So if you had to choose without benchmarking, go with the second one.
To answer the actual question, which is faster will probably depend on the alignment of
pos. If it’s aligned properly, then 1 will probably be faster. If not, then 2 might be faster depending on how it’s optimized by the compiler. (1 might even crash if the hardware doesn’t support misaligned access.)But this is all guess-work. You really need to benchmark it to know for sure.
At the very least, you should look at the compiled assembly:
vs.
Which in this case (in MSVC) shows the exact same assembly with default optimizations. So you can expect the performance to be the same.