将运行时变量存储在C++; 这是关于C++的问题。 我有一个目标跟踪程序,它在一个循环中从0,…,n获取图像。在当前帧中,计算基于以前的帧,因此我需要保存这些变量、矩阵等,以供以后使用。这个程序现在必须集成到另一个系统中,该系统将提供图像,我必须返回跟踪输出。系统稍后会执行其他进程,因此我的程序必须成为函数才能作为DLL分发

将运行时变量存储在C++; 这是关于C++的问题。 我有一个目标跟踪程序,它在一个循环中从0,…,n获取图像。在当前帧中,计算基于以前的帧,因此我需要保存这些变量、矩阵等,以供以后使用。这个程序现在必须集成到另一个系统中,该系统将提供图像,我必须返回跟踪输出。系统稍后会执行其他进程,因此我的程序必须成为函数才能作为DLL分发,c++,memory,C++,Memory,我需要存储以前图像中的变量和矩阵,以便再次使用它们。我不知道最好的做法是否是将它们写入硬盘,然后在另一个实例中再次读取。如果是这种情况,写入/读取数据类型/文件的最佳方式是什么。这些系统旨在实现实时性 谢谢您可以研究的一件不安全的事情是将局部变量保持为静态。如果您不熟悉C/C++静态变量,它们将存储在全局内存空间中,并在函数调用之间“记住”。它们类似于全局变量,但只能由声明它们的函数访问。运行几次,看看会发生什么 void foo() { static int x=0; x++; c

我需要存储以前图像中的变量和矩阵,以便再次使用它们。我不知道最好的做法是否是将它们写入硬盘,然后在另一个实例中再次读取。如果是这种情况,写入/读取数据类型/文件的最佳方式是什么。这些系统旨在实现实时性


谢谢

您可以研究的一件不安全的事情是将局部变量保持为
静态
。如果您不熟悉C/C++静态变量,它们将存储在全局内存空间中,并在函数调用之间“记住”。它们类似于全局变量,但只能由声明它们的函数访问。运行几次,看看会发生什么

void foo()
{
  static int x=0;
  x++;
  cout << x << endl;
}
void foo()
{
静态int x=0;
x++;

cout有一件事你可能会发现它不是线程安全的,那就是将局部变量保持为
静态的
。如果你不熟悉C/C++静态变量,它们会存储在全局内存空间中并“记住”函数调用之间。它们类似于全局变量,但只能由声明它们的函数访问。运行几次,看看会发生什么

void foo()
{
  static int x=0;
  x++;
  cout << x << endl;
}
void foo()
{
静态int x=0;
x++;

cout不是一个真正的答案,只是一个关于细节的更长的请求

任何类型的数据持久性问题都涉及以下决策:

  • 所需生存期:应用程序控制、线程、进程,直到主机重新启动,无限期
  • 存储库将有多少并发读写器
  • 读卡器/写卡器在网络/硬件之间的间距如何(例如,端号问题、延迟)
你真的没有提供足够的细节来认真开始这件事

如果你的直觉是正确的,文件是一个合适的机制,你可能会考虑内存映射是否与你的需求很好……它比流文件I/O

要快得多。 替代方案包括共享内存段(可以比创建进程的寿命更长)、堆

如果您真正感兴趣的是序列化机制,那么您可以看看boosts


无论如何,我不在家,所以可能会有其他人来回答……

不是真正的答案,只是一个更长的细节请求

任何类型的数据持久性问题都涉及以下决策:

  • 所需生存期:应用程序控制、线程、进程,直到主机重新启动,无限期
  • 存储库将有多少并发读写器
  • 读卡器/写卡器在网络/硬件之间的间距如何(例如,端号问题、延迟)
你真的没有提供足够的细节来认真开始这件事

如果你的直觉是正确的,文件是一个合适的机制,你可能会考虑内存映射是否与你的需求很好……它比流文件I/O

要快得多。 替代方案包括共享内存段(可以比创建进程的寿命更长)、堆

如果您真正感兴趣的是序列化机制,那么您可以看看boosts


无论如何,我不在家,所以可能会有其他人来回答……

这取决于您的平台,但现在很少有平台没有大量内存可供使用。因此,如果您只是保存上一次传递的数据,不管有多少,我的第一个尝试是将其全部保存在内存中的某个位置

如果你最终耗尽了空间,我的第二步将是为你的系统寻找更多的内存。如果它需要额外的100美元,而你没有制造数千个单元,那么从长远来看,它可以为你节省工程时间


如果没有,那么您可以担心从磁盘实时保存和恢复数据的额外复杂性。

这取决于您的平台,但现在很少有平台没有大量的内存可供使用。因此,如果您只是保存上一次的数据,无论数据量有多大,我的第一个尝试就是保存把这一切都记在某个地方

如果你最终耗尽了空间,我的第二步将是为你的系统寻找更多的内存。如果它需要额外的100美元,而你没有制造数千个单元,那么从长远来看,它可以为你节省工程时间


如果没有,则
您可以担心从磁盘实时保存和恢复的额外复杂性。

一些想法和建议:

存储图像或图像的属性? 一般来说,一张图像会比从图像中计算出来的属性或数据占用更多的空间。也许您可以存储图像的属性,而不是整个图像

缓存数据 将尽可能多的数据放在内存中,将其余的存储在文件中。需要回答的问题是必须在内存中存储多少信息(例如最后N项或可能是前N项)

多线程(任务或线程) 有一个线程可按需缓存图像。在接收图像时,它会将图像放入内存(或属性)。当固定内存区域填满时,它会将图像(或属性)放入外部内存(例如文件)。主线程将从缓存线程请求图像。缓存线程删除图像后,它将用文件中的一个数据替换该图像(或属性)。线程可以休眠,直到出现新图像或请求旧图像<