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

📄 falloc.c

📁 Audacity是一款用於錄音和編輯聲音的、免費的開放源碼軟體。它可以執行於Mac OS X、Microsoft Windows、GNU/Linux和其它作業系統
💻 C
字号:
/* * falloc.c * data for fugue memory allocation. */#include <stdio.h>#include "xlisp.h"#include "sound.h"#include "falloc.h"/* special free lists */CQUE *sample_block_free = NULL;    /* really a sample_block_type *//* special counts */int sample_block_used = 0;int sample_block_low_water = 0;int sample_block_total = 0;int snd_list_used = 0;int sound_used = 0;/* generic free lists */CQUE *generic_free[MAXLISTS];void falloc_init(void){    int i;    for (i = 0; i < MAXLISTS; i++) generic_free[i] = NULL;}/* memory pool */char *poolp = NULL;char *poolend = NULL;int npools = 0;void sound_already_free_test(s)  sound_type s;{    sound_type sp;    for (sp = (sound_type) sound_free; sp; sp = (sound_type) ((CQUE *) sp)->qnext) {        if (s == sp) {            stdputstr("SOUND ALREADY FREE!!!");            fflush(stdout);            sp = 0; sp->list = 0;   /* trap to debugger */        }    }}/* new_pool -- allocate a new pool from which mem is allocated *//**/void new_pool(void){    poolp = (char *) malloc(MAXPOOLSIZE);    if (poolp == NULL) {        fprintf(stderr, "fugue: out of memory!\n");        EXIT(1);    }    poolend = poolp + MAXPOOLSIZE;    npools++;    /* stick to double word boundaries */    poolp = (char *) round_size(((long) poolp));}/* find_sample_block -- get sample block when freelist is empty *//* Try these strategies in order:   1) try free list   2) use pool to get sample_blocks_low_water + BLOCKS_PER_GC blocks or until      pool runs out   3) GC and try free list again, set sample_blocks_low_water to       sample_blocks_used   4) try pool again   5) allocate new pool and use it */sample_block_type find_sample_block(void){	    sample_block_type sp;    if (sample_block_total < sample_block_low_water + BLOCKS_PER_GC &&        check_pool(round_size(sizeof(sample_block_node)))) {        if (DEBUG_MEM) poolp += DEBUG_MEM_INFO_SIZE;        sp = (sample_block_type) poolp;        poolp += round_size(sizeof(sample_block_node));        sample_block_total++;/*	printf("fp%d ", sample_block_total - sample_block_low_water); */    } else {/*	printf("falloc calling gc\n"); */        gc();        sample_block_low_water = sample_block_used;        if (!Qempty(sample_block_free)) {            Qget(sample_block_free, sample_block_type, sp);/*	    printf("gc, then from freelist\n"); */        } else if (check_pool(round_size(sizeof(sample_block_node)))) {            if (DEBUG_MEM) poolp += DEBUG_MEM_INFO_SIZE;            sp = (sample_block_type) poolp;            poolp += sizeof(sample_block_node);            sample_block_total++;/*	    printf("gc, then from pool\n"); */        } else {            new_pool();            if (DEBUG_MEM) poolp += DEBUG_MEM_INFO_SIZE;            sp = (sample_block_type) poolp;            poolp += round_size(sizeof(sample_block_node));            sample_block_total++;/*	    printf("gc, then new pool\n"); */        }    }    return sp;}/* get_from_pool -- return size bytes from pool memory *//**/char *get_from_pool(size_t siz){    if (!check_pool(siz)) {        new_pool();    }    poolp += siz;    if (DEBUG_MEM) poolp += DEBUG_MEM_INFO_SIZE; /* allow for debug info */    return poolp - siz;}

⌨️ 快捷键说明

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