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

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

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

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

bool memoRead(uint32_t *memoRowData, uint8_t memoRowNumber); 

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

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

memoDebug(0);

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

memoDebug(1);

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

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

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

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

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

而不是做:

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 会更大。

关于内存泄漏的问题,我们不会分配或取消分配任何不应导致任何内存泄漏的内存,请参阅:reason for memory leakage in C C++, Risk of damaging your computer by altering memory in C++。如果您不确定什么会导致内存泄漏,我建议您在做任何您不知道的事情之前先阅读一些文章。

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

编辑:

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

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