Без изменений в куче? - PullRequest
       3

Без изменений в куче?

0 голосов
/ 28 февраля 2019

Я написал простую функцию, чтобы проверить, работает ли malloc.Я создаю массив 1 Гб, заполняю его числами, но куча, похоже, не меняется.Вот код:

#include <stdio.h>
#include <assert.h>  // For assert()
#include <stdlib.h>  // For malloc(), free() and realloc()
#include <unistd.h>  // For sleep()

static void create_array_in_heap()
{
    double* b;
    b = (double*)malloc(sizeof(double) * 1024 * 1024 * 1024);
    assert(b != NULL);    // Check that the allocation succeeded

    int i;
    for (i=0; i<1024*1024*1024; i++);
        b[i] = 1;

    sleep(10);

    free(b);
}

int main()
{
    create_array_in_heap();

    return 0;
}

снимок экрана системного монитора Linux screenshot of Linux' system monitor

Есть идеи, почему?

1 Ответ

0 голосов
/ 28 февраля 2019

РЕДАКТИРОВАТЬ: более простое объяснение дается в комментариях.Но мой ответ применим, как только ; был удален .

Агрессивный оптимизирующий компилятор, такой как Clang ( Compiler Explorer link ), может видеть, что единственныйВажной частью вашей функции create_array_in_heap является вызов sleep.Остальное не имеет функционального значения, так как вы заполняете блок памяти только для того, чтобы в конечном итоге его отбросить, и он удаляется компилятором.Это вся ваша программа, скомпилированная Clang 7.0.0 с -O2:

main:                                   # @main
        pushq   %rax
        movl    $10, %edi
        callq   sleep
        xorl    %eax, %eax
        popq    %rcx
        retq

Для того, чтобы сравнить любой аспект программы, программа должна быть разработана для вывода результата (вычисление иотбрасывание результата слишком просто для компилятора).Результат также следует вычислять из входных данных, которые не известны во время компиляции, в противном случае вычисление всегда дает один и тот же результат и может быть оптимизировано путем постоянного распространения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...