память заливки со случайными данными

Моя главная причина использовать каждый - когда код идет вне 100 файлов.

, Хотя ctags может сделать работу, , некоторые IDE имеют довольно хороший способ переместиться по файлам легко супер быстро.

Это экономит время, когда у Вас есть большая работа, чтобы сделать.

5
задан Michael Goerz 4 September 2009 в 09:35
поделиться

7 ответов

Linux предоставляет вам / proc / pid / maps и / proc / pid / mem для вашего удовольствия. Конечно, писать там нужно очень осторожно. Кроме того, имейте в виду, что единственный сегмент памяти, доступный для каждого процесса, является его собственным, поэтому вам, вероятно, придется выполнить некоторые подключения и исправления кода, чтобы добраться туда, куда вы хотите. В любом случае удачи. :)

edit: Это все еще в несколько раз сложнее, чем аудит кода, который также имеет больше шансов выявить реальный источник проблемы.

2
ответ дан 18 December 2019 в 09:51
поделиться

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

Если ваша программа на Фортране объявляет переменную с плавающей запятой одинарной точности, компилятор выделит 32-битную ячейка в памяти для хранения значения. Каждый раз, когда ваша программа читает из переменной, процессор будет извлекать из ячейки 32-битное значение. Каждый раз, когда вы присваиваете переменную, процессор будет записывать в ячейку 32-битное значение. Ни при каких обстоятельствах случайные биты не должны «просачиваться» в значение из ячеек до или после ячейки.

Хотя арифметика с плавающей запятой не является точной, она также не случайна. Если вы вычислите 1.0 / 3.0 + 1.0 / 3.0 + 1.0 / 3.0) тысячу раз, вы получите 0,99999 ... каждый раз.

Второй момент заключается в том, что, когда программа выполняется в Linux, вся память данных тщательно предварительно инициализируется операционной системой до нуля. Это сделано для того, чтобы ваша программа не вел себя по-разному каждый раз, когда вы ее запускаете: это было бы ПЛОХО. РЕДАКТИРОВАТЬ: еще одна причина, по которой это делается, состоит в том, чтобы предотвратить утечку частной информации из одного процесса в другой.

(Комментаторы: обратите внимание, что я намеренно пропустил ряд вопросов, чтобы сделать объяснение простым.)

вся память данных тщательно предварительно инициализируется операционной системой до нуля. Это сделано для того, чтобы ваша программа не вел себя по-разному каждый раз, когда вы ее запускаете: это было бы ПЛОХО. РЕДАКТИРОВАТЬ: еще одна причина, по которой это делается, состоит в том, чтобы предотвратить утечку частной информации из одного процесса в другой.

(Комментаторы: обратите внимание, что я намеренно пропустил ряд вопросов, чтобы сделать объяснение простым.)

вся память данных тщательно предварительно инициализируется операционной системой до нуля. Это сделано для того, чтобы ваша программа не вел себя по-разному каждый раз, когда вы ее запускаете: это было бы ПЛОХО. РЕДАКТИРОВАТЬ: еще одна причина, по которой это делается, состоит в том, чтобы предотвратить утечку частной информации из одного процесса в другой.

(Комментаторы: обратите внимание, что я намеренно пропустил ряд вопросов, чтобы сделать объяснение простым.)

5
ответ дан 18 December 2019 в 09:51
поделиться

Если у вас последняя (кажется,> = 2.4) glibc, вы можете использовать переменную окружения MALLOC_PERTURB_, чтобы функция malloc () возвращала память, для которой установлено какое-то значение. См. http://udrepper.livejournal.com/11429.html и внутри http://people.redhat.com/drepper/defprogramming.pdf

Тогда вопрос в том, если ваш Fortran программа использует glibc malloc (), я думаю, это зависит от компилятора Фортрана.

4
ответ дан 18 December 2019 в 09:51
поделиться

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

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

2
ответ дан 18 December 2019 в 09:51
поделиться

То, чего вы хотите достичь, хотя и благородно по замыслу и интересно задумано, напоминает мне о планах Хитрого Койота по поимке Roadrunner, в то время как винтовка и снайперская стрельба были лучший вариант.

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

Что вам следует сделать, так это провести аудит вашего кода. а затем избить какого-нибудь аспиранта, если он снова все испортит.

2
ответ дан 18 December 2019 в 09:51
поделиться

Я думаю, что случайные данные значительно усложнят отладку. Случайность в ответах вызвана случайными значениями в памяти или ошибкой вычислений? Я бы сказал, что фиксированные и известные значения были бы лучше.

Со стороны FORTRAN, вы говорите, что числа «смешанной точности» используются взаимозаменяемо? Я не понимаю, в чем именно проблема.

Но я понятия не имею, как чем-нибудь заполнить свободную память в Linux.

1
ответ дан 18 December 2019 в 09:51
поделиться

Вы попросили помощи в реализации вашего решения проблемы, заключающейся в рандомизации памяти. Однако я считаю, что это странное и, возможно, сложное для отладки решение.

Мне кажется, что вы выиграете больше от - инструменты статического анализа кода - специфическое модульное тестирование - контрольные списки для проверки кода, специально нацеленные на эту проблему

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

1
ответ дан 18 December 2019 в 09:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: