⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heap.c

📁 eXtremeDB数据库在Linux平台下的使用源码。内含多个示例程序
💻 C
字号:
/************************************************************ *                                                          * * Copyright (c) 2001-2007 McObject LLC. All Right Reserved.* *                                                          * ************************************************************//* * This sample demonstarates heap API usage. The API resembles * standard C runtime memory API, only every heap function takes * an additional parameter - heap handle that should be obtained via * mco_heap_init() call */#include "platform.h"#include <stdio.h>#include <stdlib.h>#ifndef _VXWORKS  #include <malloc.h>#endif#include "mco.h"/* our application need 8K of dynamic memory, not that it MUST be * a power of 2 in size. Try to set otherwise, and get the * runtime fatal exception. */#define HEAP_SIZE 8192/* this is the starting address, could be just taken from the * the memory map, or if the OS is kind enough, could be * allocated with malloc */void *start_address;/* The address of the heap control structure must be allocated * prior to the heap initialization and must be passed into * the heap initialization API. Again this address could be * taken from the map, or malloc-ed if possible */mco_heap_h app_heap;static void _SH_(void) {	char text[] = {		"\nThis sample demonstarates heap API usage. The API resembles\n"		"standard C runtime memory API, only every heap function takes\n"		"an additional parameter - heap handle that should be obtained via\n"		"mco_heap_init() call\n"	};	char text1[] = {		"Copyright (c) 2001-2007 McObject LLC. All Right Reserved.\n\n"	};	printf("%s\n%s\nPress Enter to start", text,text1);	getchar();}/* If the address is static this is of course not necessary */void free_start_address(void * p) {	if(p) free(p);}static void errhandler( int n ) {	printf( "\neXtremeDB fatal error: %d", n );	getchar();	exit( -1 );}int main(void) {	uint4 *buffer;	uint4 size;	int hhsize;	_SH_();	/* Get the size of the heap control structure. The heap control structure	 * address - heap header, must be provided by the application and	 * passed into the heap initialization API mco_heap_init() along with	 * the heap start address.	 */	mco_runtime_start();	hhsize = mco_heap_head_size();	if (!(app_heap = (mco_heap_h)malloc(hhsize))) {		printf("Invalid address for the heap header.\n");		exit (0);	}	if (! (start_address = malloc(HEAP_SIZE))) {		printf("Invalid head address\n");		exit (0);	}	/* set fatal error handler */	mco_error_set_handler( &errhandler );	/* initialize application's heap */	mco_heap_init( start_address, HEAP_SIZE, app_heap, "heap" );	if( (buffer = (uint4 *)mco_malloc(app_heap, 500 * sizeof( uint4 ) )) == NULL)		exit( 1 );	size = mco_heap_usedsize(app_heap);	printf( "Size of block after mco_malloc of 500 longs: %u\n", size );	/* Reallocate and show new size: */	if( (buffer = mco_realloc( app_heap, buffer, size + (500 * sizeof( uint4 )) ))	==  NULL )		exit( 1 );	size = mco_heap_usedsize(app_heap);	printf( "Size of block after mco_realloc of 500 more longs: %u\n", size );	size = mco_heap_freesize(app_heap);	printf( "Left in the heap after mco_malloc of 1000 longs: %u\n", size );	mco_free(app_heap, buffer );	/* destroy application's heap and free up its starting address (if necessary) */	mco_heap_destroy  ( app_heap);	mco_runtime_stop();	free(start_address);	free(app_heap);	printf ("Press Enter to exit");	getchar();  PROG_EXIT(0);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -