ВУЗ:
Составители:
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), т.к. в среди этих блоков в произвольном порядке выделяется память под данные разных типов, как бы внутри все
Страницы
- « первая
- ‹ предыдущая
- …
- 68
- 69
- 70
- 71
- 72
- …
- следующая ›
- последняя »