malloc_memdsp.c
3.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
=============================================================================
Copyright (C) 1997-1999 NINTENDO Co.,Ltd.
$RCSfile: malloc_memdsp.c,v $
$Revision: 1.1.1.1 $
$Date: 2002/10/30 02:07:09 $
=============================================================================
関数名:malloc_memdsp
-----------------------------------------------------------------------------
書式: #include <malloc.h>
int malloc_memdsp(unsigned char *s, int size)
引数: s 文字列のポインタ
size 文字列のサイズ ÷ 60
戻り値:使用したサイズ ÷ 60
説明: 指定した一次元文字列を60桁を1行として、メモリ割り当て領域の情報を
文字情報として返す。注意事項としては、文字列は 60 × 2 の倍数で
なければならない。
文字情報の表示例
#define MEMCHECK_STRINGLEN 10
void dsp_memcheck(void)
{
int i, j;
char s[MEMCHECK_STRINGLEN*60];
i = malloc_memdsp(s, MEMCHECK_STRINGLEN);
for (j=0; j<i;j++) osSyncPrintf("%s\n",s+j*60);
}
文字情報の内容
文字情報は2行で1データを現す。
1行目
"########:$$$$$$$$-&&&&&&&&"
########は、ヘッダ情報格納アドレス
$$$$$$$$は、確保または開放されているメモリブロックの
先頭アドレス
&&&&&&&&は、確保または開放されているメモリブロックの
終端アドレス
2行目
2行目は、メモリブロックのヘッダ情報を現す。
" (########)[$$$$$$$$] FREE"
" (########)[$$$$$$$$] USE"
" (########)[$$$$$$$$] ALIN"
########は、メモリブロックのバイトサイズ
$$$$$$$$は、次のヘッダ情報のアドレス
文字列末の文字列
FREE メモリブロックが開放され、使用可能領域
USE メモリブロックが使用済み
ALIN memalign関数使用時にアライメントの補正の
為にサイズが0のヘッダだけのメモリブロック
内容が不正の場合
"malloc_memdsp error:######## over area $$$$$$$$-&&&&&&&&"
ヘッダ情報にかかれた「次のヘッダ情報のアドレス」が、
InitHeap()で確保されている範囲を超えている。
"malloc_memdsp error:check InitHeap()"
InitHeap() がされずに malloc_memdsp() が呼び出されたか、
最初のメモリブロックのヘッダ情報が不正な情報になっている。
-----------------------------------------------------------------------------
*/
#include <ultra64.h>
#include "string.h"
#include "malloc.h"
#include "_malloc.h"
int malloc_memdsp(unsigned char *s, int size)
{
if ((int)malloc_ptr == -1) {
sprintf(&s[ 0], "malloc_memdsp error:check InitHeap()");
sprintf(&s[60], "");
return 2;
}
return _malloc_memdsp(malloc_ptr, s, size);
}