Немного упрощенно, в C есть три типа переменных: статические, автоматические и динамические.
Статические переменные существуют на протяжении всей жизни программы и включают как глобальные переменные, так и локальные переменные, объявленные с использованием static
. Они либо инициализируются нулями (по умолчанию), либо явно инициализируются данными. Если они являются нулями, компоновщик сохраняет их на новой странице памяти, которую операционная система инициализирует нулями (это занимает крошечное время). Если они явно выделены, компоновщик помещает данные в область памяти исполняемого файла, и операционная система загружает их оттуда (для этого требуется чтение данных с диска в память).
Автоматические переменные выделяются из стека, и если они инициализируются, это происходит каждый раз, когда они выделяются. (Если нет, они не имеют значения или, возможно, имеют случайное значение, поэтому инициализация не занимает много времени.)
Динамические переменные выделяются с помощью malloc
, и вы должны инициализировать их самостоятельно, и это снова занимает немного времени.
Весьма вероятно, что ваше замедление не вызвано инициализацией. Чтобы убедиться в этом, вы должны измерить его, профилировав свою программу и посмотрев, где потрачено время. К сожалению, профилирование может быть затруднено для инициализации, выполняемой компилятором / компоновщиком / операционной системой, особенно для частей, которые происходят до того, как ваша программа начинает выполняться.
Если вы хотите измерить, сколько времени требуется для инициализации массива, вы можете написать фиктивную программу, которая ничего не делает, но включает в себя массив.
Однако, поскольку 33 * 33 - это довольно небольшое число, либо элементы матрицы очень велики, либо компьютер работает очень медленно, либо 33 больше, чем у меня.