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

UptoLike

70
Первым параметром в функцию memset передается
указатель на область памяти, вторым значение байта (от 0 до 0xff),
третьим размер области в байтах (в результате все байты получают
одинаковые значения ).
Так как необходимость заполнения выделенной памяти нулями
встречается часто , в стандартной библиотеке есть специальная функция
calloc, которая выделяет память и сразу обнуляет ее. У этой функции, в
отличие от malloc, два параметра: размер элемента в байтах и количество
элементов. То есть функция calloc ориентирована на выделение памяти
сразу под несколько элементов одинакового размера (а значит, как
правило, и типа), и в результате мы получаем динамически созданный
массив элементов. Динамические массивы мы рассмотрим позже. В нашем
же случае для выделения памяти под структуру struct a мы могли бы
записать
s = calloc(sizeof(struct a),1)
На самом деле calloc работает через malloc примерно так :
void *calloc(unsigned long size, unsigned long cnt)
{
unsigned long n = size*cnt;
void *p = malloc(n);
if(p == NULL) return NULL:
memset(p, 0, n);
return p;
}
Когда динамически выделенная память программе больше не нужна,
ее можно освободить при помощи стандартной функции free, параметром
которой передается указатель на область памяти, например:
free(s);
Функция free ничего не возвращает. Ей не надо передавать размер
выделенной ранее памяти, она может узнать его сама. Секрет здесь кроется
в том, что функции malloc и free работают в паре со списком свободных и
занятых блоков памяти, отведенных программе. Эти блоки называют
«кучей» (от англ. heap), т.к. в среди этих блоков в произвольном порядке
выделяется память под данные разных типов, как бы внутри все
                                    70
      Первым параметром в             функцию memset передается
указатель на область памяти, вторым – значение байта (от 0 до 0xff),
третьим – размер области в байтах (в результате все байты получают
одинаковые значения).
      Так как необходимость заполнения выделенной памяти нулями
встречается часто, в стандартной библиотеке есть специальная функция
calloc, которая выделяет память и сразу обнуляет ее. У этой функции, в
отличие от malloc, два параметра: размер элемента в байтах и количество
элементов. То есть функция calloc ориентирована на выделение памяти
сразу под несколько элементов одинакового размера (а значит, как
правило, и типа), и в результате мы получаем динамически созданный
массив элементов. Динамические массивы мы рассмотрим позже. В нашем
же случае для выделения памяти под структуру struct a мы могли бы
записать
       s = calloc(sizeof(struct a),1)
       На самом деле calloc работает через malloc примерно так:
       void *calloc(unsigned long size, unsigned long cnt)
       {
              unsigned long n = size*cnt;
              void *p = malloc(n);
              if(p == NULL) return NULL:
              memset(p, 0, n);
              return p;
       }

     Когда динамически выделенная память программе больше не нужна,
ее можно освободить при помощи стандартной функции free, параметром
которой передается указатель на область памяти, например:
      free(s);
      Функция free ничего не возвращает. Ей не надо передавать размер
выделенной ранее памяти, она может узнать его сама. Секрет здесь кроется
в том, что функции malloc и free работают в паре со списком свободных и
занятых блоков памяти, отведенных программе. Эти блоки называют
«кучей» (от англ. heap), т.к. в среди этих блоков в произвольном порядке
выделяется память под данные разных типов, как бы внутри все