Hauptindex | Abschnitt 2 | Optionen |
void * mremap(void * old_address, size_t old_size , size_t new_size, unsigned long flags);
old_address ist die alte Adresse des virtuellen Speicherblocks den man vergrößern (oder verkleinern) möchte. Beachten Sie, daß old_address an die Speicherseiten ausgerichtet sein muß. old_size ist die alte Größe des virtuellen Speicherblocks. new_size ist die angeforderte Größe des virtuellen Speicherblocks nach der Größenänderung.
Das Argument flags ist ein Bitmuster von Flags.
Unter Linux ist der Speicher in Seiten eingeteilt. Ein Benutzerprozes hat (eine oder) mehrere lineare virtuelle Speichersegmente. Jedes virtuelle Speichersegment hat ein oder mehr Verknüpfungen zu realen Speicherseiten (in der Seitentabelle). Jedes virtuelle Speichersegment hat seine eigenen Schutz (Zugriffsrechte), welcher eine Segmentverletzung (Segmentation violation) verursachen kann wenn auf den Speicher unkorrekt zugegriffen wird. Zugreifen auf virtuellen Speicher außerhalb der Segmente verursacht auch eine Segmentverletzung.
mremap benutzt das Linux Seitentabellenschema. mremap ändert die Verknüpfung zwischen virtuellen Adressen und Speicherseiten. Dies kann benutzt werden im ein sehr effizientes realloc zu implementieren.
MREMAP_MAYMOVE | |
zeigt an ob die Operation fehlschlagen oder die virtuelle Adresse ändern soll, wenn die Größenänderung nicht durchgeführt werden kann bei der aktuellen virtuellen Adresse. | |
EINVAL | Ein ungültiges Argument wurde angegeben. Sehr wahrscheinlich war old_address nicht an der Speicherseite ausgerichtet. |
EFAULT | "Segmentation fault." Eine Adresse im Bereich von old_address bis old_address+old_size ist eine ungültige Speicheradresse für diesen Prozes^. Man erhält sogar EFAULT, wenn Verknüpfungen existieren, die den gesammten angeforderten Adresseraum abdecken, aber von unterschiedlichem Typ sind. |
EAGAIN | Das Speichersegment ist gesperrt und kann nicht neu verknüpft werden. |
ENOMEM | Der Speicherbereich kann an der aktuellen virtuellen Adresse nicht erweitert werden, und das Flag MREMAP_MAYMOVE ist nicht gesetzt in flags. Oder es gibt nicht genug freien virtuellen Speicher. |
Ihr Lieblings-Betriebssystem-Buch für mehr Informationen über paged memory. (Modern Operating Systems von Andrew S. Tannenbaum, Inside Linux von Randolf Bentson, The Design of the UNIX Operating System von Maurice J. Bach.)
4. Juni 1996 | MREMAP (2) | Linux 1.3.87 |
Hauptindex | Abschnitt 2 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.
“ | The number of UNIX installations has grown to 10, with more expected. | ” |
— UNIX Programming Manual, 1972 |