-1
我有一个关于如何在不使用STL的情况下在C++中使用持久性的问题。我希望将一些计算历史存储在内存中,并在程序被调用时使用新计算对其进行更新。执行后不能使用静态存储类,内存会丢失。存储数据和访问并在C++中执行后从内存更新
任何指针都会有所帮助。流式传输是否正确?
我有一个关于如何在不使用STL的情况下在C++中使用持久性的问题。我希望将一些计算历史存储在内存中,并在程序被调用时使用新计算对其进行更新。执行后不能使用静态存储类,内存会丢失。存储数据和访问并在C++中执行后从内存更新
任何指针都会有所帮助。流式传输是否正确?
最简单的事情就是在磁盘上写入和读取结构。首先,定义要存储什么:
struct SavedState {
int32_t a;
float b;
char c[100]; // n.b. you cannot use std::string here!
} __attribute__((__packed__));
static_assert(std::is_trivially_copyable<SavedState>::value,
"SavedState must be trivially copyable");
然后,创建一些州和保存:
SavedState s = { 1, 2.3 };
snprintf(s.c, sizeof(s.c), "hello world!");
std::ofstream outfile("saved.state", std::ios::binary);
outfile.write(reinterpret_cast<char*>(&s), sizeof(s));
if (!outfile)
std::runtime_error("failed to write");
然后,将其还原:
SavedState t;
std::ifstream infile("saved.state", std::ios::binary);
infile.read(reinterpret_cast<char*>(&t), sizeof(t));
if (!infile)
throw std::runtime_error("failed to read");
一些重要注意事项:
std::ios::binary
需要防止来自“否rmalizing“新行(你正在存储二进制数据,而不是文本)。需要__packed__
确保结构在所有系统上具有相同的大小。同上int32_t
而不只是int
。static_assert
;在早期版本的C++中,如果需要,可以使用BOOST_STATIC_ASSERT
。
你将需要更具体。你有没有考虑写入一个文件? (另外,我删除了C标签,因为您的描述中提到了C++,它们是不同的语言) –