簡體   English   中英

C malloc + free不斷增加內存使用量

[英]C malloc + free keeps increasing memory usage

我有一個處理大量數據(100+ KB)的C應用程序。 我使用malloc()來分配所需的內存。

(char*)malloc(argLen + 18 + 2)

執行后,我使用free釋放分配的內存。

據我所知,由於某些原因,free'd內存不會返回給操作系統。 我的問題是當我再次運行程序時,它不再重用已分配的內存,而是繼續增加應用程序的內存使用量。

編輯:我很抱歉這個混亂。 該過程是WebSocket服務。 除非故意停止,否則它不會終止。 這是否意味着該進程將繼續增加其內存使用量並且不會釋放已分配的內存,除非我手動重新啟動它?

據我所知,由於某些原因,free'd內存不會返回給操作系統。

在調用free之后內存會發生什么變化依賴於實現。 您告訴操作系統您已完成它。 它可能會也可能不會釋放它。 不釋放它的一個原因是分配內存可能代價高昂,如果程序要求更多內存,操作系統可以再次返回相同的內存。

我的問題是當我再次運行程序時,它不再重用已分配的內存,而是繼續增加應用程序的內存使用量。

不。 一旦程序終止,它的所有已分配內存都將被釋放。 或者至少它應該。 然而,人們可以說“這不符合您的業務”

我做了一個簡單的C程序。 它沒有任何錯誤檢查,但您可以使用它來觀察程序運行時的行為。 用隨機值填充數組的代碼和用於打印它的代碼僅用於確保沒有任何優化。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()
{
    int *ptr;
    int size;
    char c='a';
    srand(time(NULL));

    while(c!='q')
    {
        printf("a - allocate memory\n");
        printf("f - free memory\n");
        printf("p - print array\n");
        printf("q - quit\n");
        printf("Choose: ");
        scanf(" %c", &c);
        if(c=='q')
            break;
        else if(c=='a') {
            printf("Size : ");
            scanf(" %d", &size);
            ptr=malloc(size * sizeof(*ptr));
            for(int i=0; i<size; i++)
                ptr[i]=rand();
        }
        else if (c=='f')
            free(ptr);
        else if(c=='p') {
            for(int i=0; i<size; i++)
                printf("%d", ptr[i]);
        }
    }
}

使用它時,我正在使用top -p<PID>觀察進程,它看起來像這樣:

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND     
28601 klutt     20   0    4172    692    616 S   0.0  0.0   0:00.00 a.out    

當我分配和釋放記憶時,它有時顯示,有時不顯示。 如果我指定一個大尺寸,它會更頻繁地產生影響。 是的,我知道您指定了Windows並且我使用了Linux命令,但我非常確定您可以找到用於分析Windows中的進程的等效工具。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM