Unison Help
- Unison Kernel
- Pthreads
- pthread_create()
- pthread_exit()
- pthread_self()
- pthread_equal()
- pthread_join()
- pthread_detach()
- pthread_setschedparam()
- pthread_getschedparam()
- pthread_attr_init()
- pthread_attr_destroy()
- pthread_attr_setstackaddr()
- pthread_attr_getstackaddr()
- pthread_attr_setstacksize()
- pthread_attr_getstacksize()
- pthread_attr_setschedparam()
- pthread_attr_getschedparam()
- pthread_attr_setdetachstate()
- pthread_attr_getdetachstate()
- pthread_stackinfo()
- pthread_setprio()
- pthread_getprio()
- sched_get_priority_max()
- sched_get_priority_min()
- sched_yield()
- Pthread Cancellation
- Mutex
- Semaphores
- Message Queues
- Conditional Variables
- Barriers
- Timers
- Clocks
- Memory Allocation
- Rendezvous
- Interrupts
- Directory Services
- Miscellaneous
- Pthreads
- Unison I/O Library
- Unison STDIO Library
- STDIO Library Calls
- clearerr()
- dprintf()
- fclose()
- fdopen()
- feof()
- ferror()
- fileno()
- fflush()
- fgetc()
- fgetpos()
- fgets()
- fopen()
- fprintf()
- fputc()
- fputs()
- fread()
- freopen()
- fscanf()
- fseek()
- fseeko()
- fsetpos()
- ftell()
- ftello()
- fwrite()
- getc()
- getc_unlocked()
- getchar()
- getchar_unlocked()
- getdelim()
- getline()
- gets()
- get_stderr_ptr()
- get_stdin_ptr()
- get_stdout_ptr()
- noperprintf()
- perprintf()
- perror()
- posix_compat()
- printf()
- putc()
- putc_unlocked()
- putchar()
- putchar_unlocked()
- puts()
- remove()
- rewind()
- scanf()
- setbuf()
- setvbuf()
- snprintf()
- sprintf()
- sscanf()
- stderr_init()
- stderr_close()
- stdin_init()
- stdin_close()
- stdout_init()
- stdout_close()
- vdprintf()
- vscanf()
- vsscanf()
- vfscanf()
- vprintf()
- vsnprintf()
- vsprintf()
- vfprintf()
- ungetc()
- Do-nothing Stubs
- STDIO Library Calls
- Unison LIBC Library
- Unison I/O Servers
- Graphics, Camera, Video, Audio
- Network Protocols
- TCP and UDP Server - tcpd
- DHCP Client Service - dhcp client
- DHCP Server - dhcpd
- Telnet Server - telnetd
- Tiny FTP Server - tftpd
- Point to Point - pppd
- Network Translation - NAT with PAT
- Firewall
- Tiny HTTP Server - thttpd
- Tiny HTTP Server with TLS
- POP3 Server
- Simple Mail Transfer Protocol Services (SMTP)
- Bootp Protocol
- File Transfer Protocol Server (FTP)
- File Transfer Client Services
- RPC / XDR
- DNS Client
- HTTP/HTTPS Client
- REST Client
- AutoIP Service - autoip client
- mDNS server - mdnsd
- SNTP Client
- SNMP Agent - Snmpd server
- SSL/TLS library
- SSH server
- IP security
- Power Control
- Serial I/O
- System Services
- Universal Serial Bus (USB)
- Wireless
- Remedy Tools for Unison
1.14.7.kfree() #
NAME
kalloc, kfree – kernel memory allocation functions
SYNOPSIS
#include <sys.h>
#include <kalloc.h>
- void *kalloc( int type , size_t size );
- void kfree( int type , void *ptr );
DESCRIPTION
The kalloc() function is called by the kernel when it needs memory. The type argument describes what the memory is to be used for. The values for type are defined in the file kalloc.h. This is a very powerful tool particularly when using processors with significant memory restrictions on where sections can go and what buffers or items are required in each section.
size describes how much memory is required.
The kfree() function is called to return memory allocated with the kalloc() function.
Default routines are provided which just call malloc() and free().
RETURN VALUES
If there is no available memory, kalloc() returns a null pointer.
EXAMPLES
The first example is for a static system with no dynamic memory requirements of its own.
#include <sys.h> #include <kalloc.h> unsigned heap[MEMSIZE]; unsigned heapp; void *kalloc(int type, int size) { if(heapp + size < MEMSIZE) { void *ptr = &heap[heapp]; heapp += size; return ptr; } return 0; } /* never called */ void kfree(int type, void *ptr) {}
In the second example, the user wants dynamic memory to come from pool 0, but stacks to come from pool 1. The pools would be created with calls to pool_create().
#include <sys.h> #include <kalloc.h> void *kalloc(int type, int size) { if(type == KA_STACK) return pool_alloc(1, size); else return pool_alloc(0, size); } /* never called */ void kfree(int type, void *ptr) { if(type == KA_STACK) pool_free(1, ptr); else pool_free(0, ptr); }