组织从内存读取的数据的最佳方法(用于调试)c++

Best way of organizing data read from memory (for debugging) c++

本文关键字:用于 调试 c++ 方法 数据 内存 读取 最佳      更新时间:2023-10-16

我不是软件工程师,这意味着我不擅长组织我的代码,所以这个任务对你来说可能看起来很简单。

我有一个用于 32 位 ARM 设备(使用 lubuntu(的 qt c++ 应用程序。该应用程序包含一个窗口,用于调试不同嵌入式设备的外部自定义指令存储器(64行32位指令(。我创建了一个函数:

bool memoRead(uint32_t *memoRowData, uint8_t memoRowNumber); 

此函数读取存储在给定行中的数据。

我想创建一个不同的函数,它使用给定的函数从内存中读取和显示 8 行的内容。示例:当我调用时

memoDebug(0);

输出应该是存储在第 0 到 7 行中的数据,当我调用

memoDebug(1);

输出应该是存储在第 8 行到第 15 行中的数据

显而易见的方法是创建 8 个不同的uint32_t变量,分别读取每一行并将它们的值分配给创建的 8 个不同的变量并显示/打印它们(我已经完成并成功了(。但是我想使用数组或结构之类的东西来代替,以及 for loop 中的所有内容来改进代码。将来,内存大小可能会显著增加(65536 行,每次读取 64 行或更多,而不是 8 行(。

组织数据的最佳和最有效的方法是什么,我应该如何使用它?

编辑1:显然,当我的内存大小增加时,我会将memoRead函数的变量memoRowNumber的数据类型更改为uint32_t

如果我通过您在问题中提供的注释和信息正确理解了您的问题,解决方案是创建一个选择循环并将 memoRead(( 的返回值存储在数组中。

而不是做:

uint32_t row1 = memoRead();
uint32_t row2 = memoRead();

您可以按照注释中的建议使用循环:

//read the memo values in a loop
uint32_t array[8]; //specify size of array or make it dynamic instead of "8"
for(int i = 0; i < x; i++) {
array[i] = memoRead();
}
//print the row values in a loop
for(int i = 0; i < x; i++) {
std::cout << array[i] << "n";
}

其中 X 是您要读取的值,例如,如果您的数组大小为 100 而不是 8 x,则 x 会更大。

关于内存泄漏的问题,我们不会分配或解除分配任何不会导致任何内存泄漏的内存,请参阅:C C++中内存泄漏的原因,通过更改C++内存损坏计算机的风险。如果您不确定什么会导致内存泄漏,我建议您在做任何您不知道的事情之前查看一些文章。

据我所知,这是存储数据的最简单方法,尽管这不会跟踪您在哪里存储哪些行(可以优化(。

编辑:

为了在一个循环中完成所有操作,您可以简单地:

uint32_t array[8];
for (int i = 0; i < x; i++) {
array[i] = memoRead();
std::cout << array[i] << "n";
}