Языки программирования для численных методов. Глушакова Т.Н - 71 стр.

UptoLike

71
сваливается в одну кучу. У каждого занятого блока есть
внутренняя информация о его размере, которую и использует free. После
освобождения памяти free по возможности сливает меньшие участки
свободной памяти в более крупный непрерывный блок, т.е. функции free и
malloc оптимизируют работу со свободной памятью внутри себя.
Однако большие неприятности возникнут, если в функцию free
передать указатель, который не был получен функцией malloc или calloc
(или realloc см . далее), либо передать указатель на область памяти,
которая уже была освобождена free. Здесь язык C требует внимательности
со стороны программиста, стремясь максимально повысить
производительность программы в ущерб защищенности от неправильных
действий программиста: если программист написал что - то не так , то
программа просто «упадет» (аварийно завершится ).
Если в процессе работы программы оказывается, что размера ранее
выделенной области динамической памяти недостаточно , то ее можно
перевыделить при помощи функции realloc, у которой два параметра
указатель на старую область памяти и требуемый размер новой области в
байтах . Функция realloc выделяет новую область , копирует в нее
содержимое старой области, после чего освобождает старую область и
возвращает указатель на новую область (если выделить новую область не
удается, возвращается NULL и старая область остается неизменной). Если
в функцию realloc передать неправильный указатель, то она, как и функция
free, аварийно завершит программу.
Необходимо помнить , что указатель, возвращаемый функцией
realloc, отличается от старого указателя. Поэтому, если на область памяти
ссылались несколько указателей , то все их необходимо переприсвоить .
Замечание . В языке C++ для динамического выделения и
освобождения памяти вместо malloc/free целесообразнее использовать
операции new и delete, которые являются частью языка. Функции malloc и
free входят в стандартную библиотеку языка C, но не входят в сам язык.
6.4.3 Динамические массивы
Так как указатели можно индексировать , то реализовать одномерные
динамические массивы очень легко : надо лишь выделить память под
нужное количество элементов N заданного типа (т.е. область памяти
                                    71
сваливается в одну кучу. У            каждого занятого блока есть
внутренняя информация о его размере, которую и использует free. После
освобождения памяти free по возможности сливает меньшие участки
свободной памяти в более крупный непрерывный блок, т.е. функции free и
malloc оптимизируют работу со свободной памятью внутри себя.
      Однако большие неприятности возникнут, если в функцию free
передать указатель, который не был получен функцией malloc или calloc
(или realloc – см. далее), либо передать указатель на область памяти,
которая уже была освобождена free. Здесь язык C требует внимательности
со     стороны    программиста,      стремясь   максимально     повысить
производительность программы в ущерб защищенности от неправильных
действий программиста: если программист написал что-то не так, то
программа просто «упадет» (аварийно завершится).
       Если в процессе работы программы оказывается, что размера ранее
выделенной области динамической памяти недостаточно, то ее можно
перевыделить при помощи функции realloc, у которой два параметра –
указатель на старую область памяти и требуемый размер новой области в
байтах. Функция realloc выделяет новую область, копирует в нее
содержимое старой области, после чего освобождает старую область и
возвращает указатель на новую область (если выделить новую область не
удается, возвращается NULL и старая область остается неизменной). Если
в функцию realloc передать неправильный указатель, то она, как и функция
free, аварийно завершит программу.
       Необходимо помнить, что указатель, возвращаемый функцией
realloc, отличается от старого указателя. Поэтому, если на область памяти
ссылались несколько указателей, то все их необходимо переприсвоить.
       Замечание.    В языке C++ для динамического выделения и
освобождения памяти вместо malloc/free целесообразнее использовать
операции new и delete, которые являются частью языка. Функции malloc и
free входят в стандартную библиотеку языка C, но не входят в сам язык.

     6.4.3 Динамические массивы
     Так как указатели можно индексировать, то реализовать одномерные
динамические массивы очень легко: надо лишь выделить память под
нужное количество элементов N заданного типа (т.е. область памяти