brk/sbrk demo
This commit is contained in:
parent
c83cf1efd8
commit
10830c8adb
1 changed files with 57 additions and 0 deletions
57
break.c
Normal file
57
break.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include <stdint.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/mman.h> // mmap and friends
|
||||
#include <unistd.h>
|
||||
|
||||
int main(void) {
|
||||
/*
|
||||
* See: "man 3 sysconf" or
|
||||
* https://www.man7.org/linux/man-pages/man3/sysconf.3.html
|
||||
*
|
||||
* See: "man 3 getauxval" or
|
||||
* https://www.man7.org/linux/man-pages/man3/getauxval.3.html
|
||||
*/
|
||||
long page_size =
|
||||
sysconf(_SC_PAGESIZE); // or _SC_PAGE_SIZE (POSIX allows both)
|
||||
if (page_size == -1) {
|
||||
perror("sysconf");
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Page size: %ld bytes\n", page_size);
|
||||
|
||||
/*
|
||||
* sbrk():
|
||||
* Increase or decrease the end of accessible data space by DELTA bytes.
|
||||
* If successful, returns the address the previous end of data space
|
||||
* (i.e. the beginning of the new space, if DELTA > 0); returns (void \*) -1
|
||||
* for errors (with errno set).
|
||||
*/
|
||||
void *first = sbrk(0);
|
||||
void *second = sbrk(4096);
|
||||
void *third = sbrk(0);
|
||||
|
||||
printf("First: %p\n", first);
|
||||
printf("Second: %p\n", second);
|
||||
printf("Third: %p\n", third);
|
||||
|
||||
/*
|
||||
* mmap, munmap - map or unmap files or devices into memory
|
||||
*
|
||||
* mmap() creates a new mapping in the virtual address space of the
|
||||
* calling process. The starting address for the new mapping is specified
|
||||
* in addr. The length argument specifies the length of the mapping
|
||||
* (which must be greater than 0).
|
||||
*/
|
||||
|
||||
uint8_t *first_mmap = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
|
||||
uint8_t *second_mmap = mmap(NULL, page_size, PROT_READ | PROT_WRITE,
|
||||
MAP_PRIVATE | MAP_ANON, -1, 0);
|
||||
|
||||
printf("First mmap: %p\n", first_mmap);
|
||||
printf("Second mmap: %p\n", second_mmap);
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Add table
Reference in a new issue