组织从内存读取的数据的最佳方法(用于调试)c++
Best way of organizing data read from memory (for debugging) c++
我不是软件工程师,这意味着我不擅长组织我的代码,所以这个任务对你来说可能看起来很简单。
我有一个用于 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";
}
- 如何在可视化代码中生成用于 c++ 开发的调试器?
- 代码适用于调试,但不适用于发布
- 用于自定义调试构建的 CMake qt 输入库后缀
- 在Linux Mint 19下,从哪里提取wxWidgets的源代码(.cpp文件)用于步骤内部调试
- 设置用于调试的 g++ 编译器标志
- 组织从内存读取的数据的最佳方法(用于调试)c++
- C++:用于调试的类的字符串表示形式
- 编译库的C 挂钩函数用于调试
- 可以valgrind报告丢失块的内存地址(用于调试递归函数调用)
- 有选择地内联函数(用于调试目的)
- 用于C++调试项目的 IDE
- 用于调试和发布模式的宏
- 用于调试X86构建的Visual Studio链接器错误
- 创建一个简单的窗口来输出用于调试的信息(日志样式)- wxWidgets
- 用于调试消息的跨平台GUI应用程序控制台
- 用于调试Borland和Visual Studio应用程序的工具
- 是否有一种方法可以将一个条件设置为gdb中的所有断点,用于调试Cpp代码
- 用于调试的未初始化内存的常用值是什么?
- gdb:什么是用于调试的符号文件
- 用于调试混合c++和Java代码的实用方法