我正在尝试减少程序内存使用量,我手动发现的一个例子是一个可以分配150个元素的数组,但实际上只使用了前3个元素。
我想知道GDB是否可以分析哪些内存区域已经分配但在程序执行期间从未实际读取过,以帮助我找到其他类似的情况。该程序在C中,因此也欢迎GCC标志。
答案 0 :(得分:0)
如果要发现实际未使用的内存,则需要硬件调试器支持,该调试器至少捕获对内存的写访问权。
GDB没有内置硬件支持,因此无法发现它。但您可以尝试检测已更改的内存。为此,您可以在执行(program / functions / snippet / what)之前为模式分配内存,并检查数据模式的修改位置。这可以用于例如用于检测最大堆栈大小。测试完程序后,您可以检查填充的内存区域,当您看到第一个不匹配时,您就会有一个很好的猜测。
警告!该方法不能检测所有内存修改。程序可以编写您用来标记为"未使用的内存"的数据模式。因此,选择好的模式可以提供帮助。使用模式"全部为零"很弱,因为很可能在程序中用零填充内存。但是0xdeadbeaf的序列可能更明智。