Почему эта команда компиляции говорит, что использование памяти отличается от использования valgrind? - PullRequest
0 голосов
/ 06 сентября 2018

Мне нужно создать программу для университета, и есть сайт, который проверяет, сколько памяти я использую. С тем же входным сигналом, если я скомпилирую свою программу на моем компьютере и запустлю ее с помощью valgrind, он скажет, что общее использование кучи составляет 77 Кбайт, примерно 75 Кб.

Но когда я отправляю его на веб-сайт, с тем же вводом, использование памяти приводит к 384 кб, и я не понимаю, вальгринд лжет, или сайт пьян. Я подозреваю, что я компилирую свою программу с простым

gcc myprog.c -o myc

в то время как веб-сайт университета компилирует это:

/usr/bin/gcc -DEVAL -std=c11 -O2 -pipe -static -s -o program programname.c -lm

Я ничего не знаю об этой команде компиляции, профессор только что написал, что она используется на веб-сайте, и я тоже могу использовать ее на своем компьютере. Если я использую эту команду компиляции, программа работает нормально, но когда я пытаюсь использовать valgrind для исполняемого файла, созданного им, она останавливается и говорит, что не может продолжить.

Итак, вопрос вкратце: почему я вижу разницу в выделенной памяти? Это из-за чего-то, что делает эта команда компиляции?

1 Ответ

0 голосов
/ 06 сентября 2018

Если я использую эту команду компиляции, программа работает нормально, но когда я пытаюсь использовать valgrind для созданного им исполняемого файла, он останавливается и говорит, что это не может продолжаться

Вы не предоставили точное сообщение об ошибке, но в любом случае Valgrind работает плохо со статически связанными двоичными файлами (построено с опцией -static), см. Ошибки Valgrind при связывании с -static - Почему? .

почему я вижу разницу в выделенной памяти?

Поскольку вы создаете динамически связанный исполняемый файл, а веб-сайт создает статически связанный исполняемый файл, разницу между ними можно найти в Статическое связывание и динамическое связывание .

Обратите внимание, что Valgrind - не единственный инструмент для измерения использования памяти двоичного файла. Вы также можете использовать /usr/bin/time -v <binary_name> и искать Maximum resident set size в выводе.

...