试图响应another question,我提出了一个解决方案,它使用std::memcpy()
将通用类型存储在char
的缓冲区中。普通旧数据和`std :: memcpy`对齐问题
我的疑问是关于存储POD的可能的内存对齐问题(我知道与非POD类型,因为std::string
,是非常非常危险的)。
简而言之:有与下面的程序内存对齐问题?
而且如果是这样,有可能写类似(在char
缓冲区店POD值)的东西是安全的呢?如何?
#include <cstring>
#include <iostream>
int main()
{
char buffer[100];
double d1 { 1.2 };
std::memmove(buffer + 1, & d1, sizeof(double));
double d2;
std::memmove(& d2, buffer + 1, sizeof(double));
std::cout << d2 << std::endl;
return 0;
}
这应该工作。一般来说,应该检查sizeof()小于固定缓冲区,但是double方法当然要小于这里使用的100。 – Gregg
@Gregg - 当然;我用'100'来避免对缓冲区大小的怀疑。 – max66