OpenSCADAWiki: Roman Savochenko/C Short All/part2/part9 ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 

2.9 функции работы с памятью

calloc, malloc, free, realloc (ANSI) <stdlib.c, cstdlib>
void *calloc(size_t nmemb, size_t size);
void *malloc(size_t size);
void free(void *ptr);
void *realloc(void *ptr, size_t size);
Распределяют и освобождают динамическую память.
calloc – выделяет блок памяти с очисткой;
malloc – выделяет блок памяти;
free – освобождает блок памяти;
realloc – меняет размер блока памяти;


delete (C++)
delete terget;
Освобождает динамическую память, выделенную с помощью оператора new. Кроме того оператор delete активизирует деструктор объекта:

target *r= new char[256]; delete r;
target *r= new char[256]; delete []r;


memchr, memrchr (POSIX) <string.h>
void *memchr(const void *s, int c, size_t n);
void *memrchr(const void *s, int c, size_t n);
Ищет символ <c> в первых/последних <n> байтах той области памяти, на которую указывает <s>. Совпадение первого байта с <c> (представленным как беззнаковый символ) останавливает выполнение операции.


memcmp (BSD) <string.h>
int memcmp(const void *s1, const void *s2, size_t n);
Сравнивает первые <n> байтов областей памяти <s1> и <s2>. Возвращается целое число, меньшее, большее нуля или равное ему, если определено, что <s1> меньше, больше, или равно <s2>.


memcpy (BSD) <string.h>
void *memcpy(void *dest, const void *src, size_t n);
Копирует <n> байтов из области памяти <src> в область памяти <dest>.


memmove (BSD) <string.h>
void *memmove(void *dest, const void *src, size_t n);
Копирует <n> байтов из области памяти <src> в область памяти <dest>. Области памяти могут перекрываться.


memset (BSD) <string.h>
void *memset(void *s, int c, size_t n);
Заполняет первые <n> байтов области памяти <s> байтом <c>.


mlock, munlock (POSIX) <sys/mman.h>
int mlock(const void *addr, size_t len);
int munlock(const void *addr, size_t len);
Запрещает/разрешает страничный обмен памяти в области, начинающейся с адреса <addr> длиной <len> байтов.


mlockall, munlockall (POSIX) <sys/mman.h>
int mlockall(int flags);
int munlockall(void);
Запрещает/разрешает страничный обмен для всех страниц в области памяти вызывающего процесса.


mmap, munmap (POSIX) <unistd.h, sys/mman.h>
void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset);
int munmap(void *start, size_t length);
mmap – возвращает адрес отражённых <length> байтов, начиная со смещения <offset> файла (или другого объекта), определённого файловым описателем <fd>, в память, начиная с адреса <start>. munmap – удаляет все отражения из заданной области памяти.


mprotect (POSIX) <sys/mman.h>
int mprotect(const void *addr, size_t len, int prot);
Контролирует доступ <prot> к области памяти <addr> <len>.


msync (POSIX) <unistd.h, sys/mman.h>
int msync(const void *start, size_t length, int flags);
Записывает на диск изменения, внесенные в файл, отраженный в память при помощи функции mmap.


new (C++)
Type *array = new Type[256];
Используется для динамического выделения памяти (для размещения объекта в свободной памяти). Указателю array присваивается адрес выделенной памяти или присваивается NULL при её отсутствии. Оператор new автоматически активизирует конструктор объекта. Если определена функция _new_handler то она вызывается при отсутствии памяти. Способы применения оператора new:

float *r = new float; delete r;
float *r = new float(3.14); delete r;
float *r = new float[10]; delete []r;


set_new_handler (C++) <new.h | new>
void set_new_handler(void (*VFP)());
Присваивает адресу глобальной переменной _new_handler адрес функции <VFP> обработки ошибок оператора new.


 
Files[Hide files/form]
There is no comment on this page. [Display comments/form]