メモリーの再利用。
結果は×。
ストックした、メモリーのアドレスを再利用したが、タスクマネージャーで監視すると増加している。つまり、malloc()のメモリ確保とは別のところで消費しているのか・・?
//------------------------------------
// nodeスタック
// free()するところのメモリーアドレスを保存し
// 再利用する
//------------------------------------
typedef struct _NODE_STOCK{
int addr_oya;
int addr_ch;
}NODE_STOCK;
#define NODE_STOCK_CNT 10000
//要らなくなったメモリーアドレスをストックし後で再利用する
void free_node(int addr, int sw){
int i;
//ストックする空きがあるか?
if( sw == 1 && node_stock_cnt_oya > NODE_STOCK_CNT )return; //保存出来ない。
if( sw == 2 && node_stock_cnt_ch > NODE_STOCK_CNT )return; //保存出来ない。
// [0] [1] [2] <--node_stock_cnt_oya
// 1 2 3
if(sw == 1){
if(node_stock_cnt_oya < 0)node_stock_cnt_oya = 0;
i = node_stock_cnt_oya;
node_stock[i].addr_oya = addr;
node_stock_cnt_oya++;
node_stock_cnt_oya3++;
printf("%d stock address[%d] = %d, %d\n", sw, node_stock_cnt_oya, node_stock[i].addr_oya, node_stock_cnt_oya3);
}else{
if(node_stock_cnt_ch < 0)node_stock_cnt_ch = 0;
i = node_stock_cnt_ch;
node_stock[i].addr_ch = addr;
node_stock_cnt_ch++;
node_stock_cnt_ch3++;
printf("%d stock address[%d] = %d, %d\n", sw, node_stock_cnt_ch, node_stock[i].addr_ch, node_stock_cnt_ch3);
}
}
//--------------------------------
// 親の構造体にセット
//--------------------------------
NODE* list_oya_set(NODE *no, char* node, int WHO, BORD *bord, int cnt){
NODE *c=NULL, *p=NULL;
if(node_stock_cnt_oya > 0){
c = (NODE*)node_stock[node_stock_cnt_oya - 1].addr_oya;
node_stock_cnt_oya--;
printf("call stock oya %d %d %d\n", c, node_stock_cnt_oya2, node_stock_cnt_oya);node_stock_cnt_oya2++;
}else{
c = (NODE*)malloc(sizeof(NODE));
memset(c, 0, sizeof(NODE));
printf("call malloc oya %d\n", node_stock_cnt_malloc_oya);node_stock_cnt_malloc_oya++;
}
ーーーー
1 stock address[1] = 24934472, 1 ← アドレス24934472をストックし
1 stock address[2] = 24933360, 2
1 stock address[3] = 24932248, 3
1 stock address[4] = 3799896, 4
1 stock address[5] = 3798784, 5
1 stock address[6] = 3797672, 6
1 stock address[7] = 3796560, 7
1 stock address[8] = 3795448, 8
1 stock address[9] = 3794336, 9 ← アドレス3794336をストックし
2 stock address[1] = 24919376, 1
2 stock address[2] = 24920248, 2
2 stock address[3] = 24921120, 3
2 stock address[4] = 24921992, 4
2 stock address[5] = 24922864, 5
2 stock address[6] = 24923736, 6
2 stock address[7] = 24924608, 7
2 stock address[8] = 24925480, 8
2 stock address[9] = 24926352, 9
1 stock address[10] = 24935584, 10 ← アドレス24935584 をストックし
call stock oya 24935584 0 9 ← アドレス24935584 を再利用。
call stock ch 24926352 0 8
call stock ch 24925480 1 7
call stock ch 24924608 2 6
call stock oya 3794336 1 8 ← アドレス3794336 を再利用。
call stock ch 24923736 3 5
call stock ch 24922864 4 4
call stock ch 24921992 5 3
call stock ch 24921120 6 2
call stock ch 24920248 7 1
call stock ch 24919376 8 0
call malloc ch 48
call malloc ch 49
call malloc ch 50
call stock oya 3795448 2 7
call stock oya 3796560 3 6
call stock oya 3797672 4 5
call stock oya 3798784 5 4
call stock oya 3799896 6 3
call stock oya 24932248 7 2
call stock oya 24933360 8 1
call stock oya 24934472 9 0 ← アドレス24934472を再利用。
PR