another question에 응답하려고 시도한 결과 std::memcpy()
을 사용하여 char
버퍼에 제네릭 형식을 저장하는 솔루션을 제안했습니다.일반 오래된 데이터와`std :: memcpy '정렬 문제
내가 의심하는 점은 POD를 저장할 때 발생할 수있는 메모리 정렬 문제에 관한 것입니다. POD 유형이 아니라는 것을 알고 있습니다 (std::string
은 매우 위험합니다).
간단히 말해서 다음 프로그램에 메모리 정렬 문제가 있습니까?
그렇다면 안전 한 POD 값을 char
버퍼에 저장하는 것과 비슷한 것을 쓸 수 있습니까? 그리고 어떻게?
#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
@ 그레그 - 물론; 버퍼의 크기에 대한 의문을 피하기 위해'100'을 사용했습니다. – max66