Должен ли демонизировать родительскую память free () после разветвления своего потомка? - PullRequest
4 голосов
/ 29 мая 2019

Допустим, у нас есть такой код:

int main() {
    FILE *f_conf = fopen("conf.conf");
    /* File Open Error Handling */

    char *buf = malloc(128);
    /* Malloc Error Handling */

    fgets(buf, 128, f_conf);
    fclose(f_conf);

    pid_t pid = fork()
    /* Fork Error Handling */

    if (pid) {
        free(buf); /* Should this free be called? */
        return 0;
    }

    while (1) {
        /* Do Stuff */
    }

    return 0;
}

В целом, я предпочитаю освобождать память перед возвратом, поскольку любое влияние на производительность минимально, и это помогает с автоматизированными инструментами для обнаружения утечек памяти. Тем не менее, производительность / лучшие практики здесь для меня менее понятны, так как нет смысла запускать эти инструменты на демоне. Это приводит меня к двум вопросам:

  1. Повлияет ли освобождение памяти (например, *buf) родительского процесса перед возвратом на производительность ребенка? Я думаю, что может быть что-то (положительное или отрицательное) в том, как реализовано копирование при записи.
  2. Считается ли хорошей практикой родитель для free оставшихся ресурсов?

1 Ответ

1 голос
/ 29 мая 2019

Я считаю хорошей практикой ограничить выделение вещи именно той исполняемой областью, для которой она действительна.Для меня бесплатное - это часть документации - эта вещь больше не действительна и не доступна.Во всем, что касается программирования, лаконичность дает ясность;и четкие программы могут быть улучшены и оптимизированы;непоследовательные не могут.

С точки зрения производительности на развилке, если вы дошли до измерения эффекта кэширования страниц, вы, вероятно, находитесь в очень темном месте.По сути, страницы процесса будут указывать на одну и ту же страницу;если один отказывается от страницы, другой получает ее бесплатно [нет смысла копировать, если refcount == 1].На самом деле, все, что происходит, - это обновление нескольких узлов связанного списка, и вы не можете реально измерить его.

Тем не менее, если вы используете распределение для всего DVD или чего-то еще, да, вы можетерассмотрите возможность его отображения shared .

...