コード例 #1
0
ファイル: _malloc.c プロジェクト: lkyunl4/C
void mem_initialize(){
	void* ptr = HEAP_START;
	void* end = HEAP_END;
	set_unused(ptr);
	set_block_size(ptr,(end - ptr) + 1);
	initialized = 1;
}
コード例 #2
0
ファイル: _malloc.c プロジェクト: lkyunl4/C
void _free(void * ptr){
	set_unused(ptr);
	void *next_ptr = NEXT_BLOCK(ptr);
	if( next_ptr!= NULL && !IS_USED(next_ptr)){
		set_block_size(ptr, BLOCK_SIZE(ptr) + BLOCK_SIZE(next_ptr));
	}

	void* pre_ptr = pre_block(ptr);
	if(pre_ptr != NULL && !IS_USED(pre_ptr)){
		set_block_size(pre_ptr, BLOCK_SIZE(ptr) + BLOCK_SIZE(pre_ptr));
	}

}
コード例 #3
0
static int
remove_from_page (DirPage0 *page0,
		  DirPage1 *page,
		  unsigned pageno,
		  unsigned off)
{
    DirEntry *entry = &page->entry[off];
    unsigned n, i;

    n = 1 + additional_entries (entry->name);

    if (pageno < MAXPAGES)
	page0->dheader.map[pageno] += n;

    entry->next = 0;
    entry->fid.Vnode  = 0;
    entry->fid.Unique = 0;

    for (i = off + 1; i < off + n + 1; ++i)
	set_unused (page, i);
    return 0;
}
コード例 #4
0
ファイル: _malloc.c プロジェクト: lkyunl4/C
void set_next_block(void *ptr, size_t ex_size, size_t size){
	void* next = NEXT_BLOCK(ptr);
	set_unused(next);
	set_block_size(next, ex_size - size);
}