2
內存不足是Java和其他OO語言中最常見的錯誤之一。 我們是否可以應用靜態程序分析來減少「內存不足」錯誤? 我正在尋找旨在減少此錯誤而無需運行代碼的方法。 是否有任何特定的分析領域在這方面進行研究?使用靜態程序分析解決內存不足錯誤
內存不足是Java和其他OO語言中最常見的錯誤之一。 我們是否可以應用靜態程序分析來減少「內存不足」錯誤? 我正在尋找旨在減少此錯誤而無需運行代碼的方法。 是否有任何特定的分析領域在這方面進行研究?使用靜態程序分析解決內存不足錯誤
是的,靜態分析儀能夠檢測出界限。它們比動態分析器稍差,因爲它們無法追蹤指針使用情況的複雜情況。而且,靜態分析儀無法獲得一些信息。讓我們考慮一個抽象的情況:
void OutstandingIssue(const char *strCount)
{
unsigned nCount;
sscanf_s(strCount, "%u", &nCount);
int array[10];
memset(array, 0, nCount * sizeof(int));
}
無論數組索引越界發生與否,將取決於從外部接收的數據 。靜態代碼分析器在這裏是無能爲力的。在此可以做的最大限度是警告輸入的值沒有檢查就被使用。動態分析儀將在測試程序期間檢測錯誤,同時它將接收各種輸入數據。這些主題被給予here與更多細節。
但是,如果有一個問題「靜態分析儀真的有幫助嗎?」,答案是肯定的,確實如此。例如,由PVS-Studio團隊收集的一組錯誤包含由靜態分析器檢測到的很多這類錯誤:V512,V645。
這主要檢測與mem *函數有關的問題。 Java的編程語言呢? 你可以使用靜態分析來檢測潛在的Java內存不足代碼嗎? –
我不使用Java,我不知道確切的答案。但我相信,使用SCA可以在Java中捕獲到類似的錯誤。 – AndreyKarpov
你知道有這麼好的工具嗎? –