11: 2008-11-21 (金) 17:46:55 |
12: 2008-11-21 (金) 17:46:55 |
| -[000008] void jg01_malloc(int bytes, void **p) | | -[000008] void jg01_malloc(int bytes, void **p) |
| --システムからメモリをもらう。これはbss領域の中を切り分けてもらうなどではなく、それとは別に追加でもらうメモリである。失敗する可能性は十分にあり、失敗すると*pに-1が返される。 | | --システムからメモリをもらう。これはbss領域の中を切り分けてもらうなどではなく、それとは別に追加でもらうメモリである。失敗する可能性は十分にあり、失敗すると*pに-1が返される。 |
| + | --このファンクションでもらったメモリは原則としてデータ用で、ページに実行可能属性を付与されることは保証していない。 |
| -[000008] void jg01_malloc1(int bytes, void **p, int i) | | -[000008] void jg01_malloc1(int bytes, void **p, int i) |
| --システムからメモリをもらう。これはbss領域の中を切り分けてもらうなどではなく、それとは別に追加でもらうメモリである。このAPIは絶対に失敗しない。というのは失敗した場合はしかるべきメッセージが表示されてユーザに連絡した後、g01_exit_failure_int32(i);が直ちに実行されるためである。メッセージの内容は環境に依存する。 | | --システムからメモリをもらう。これはbss領域の中を切り分けてもらうなどではなく、それとは別に追加でもらうメモリである。このAPIは絶対に失敗しない。というのは失敗した場合はしかるべきメッセージが表示されてユーザに連絡した後、g01_exit_failure_int32(i);が直ちに実行されるためである。メッセージの内容は環境に依存する。 |
| --このAPIはメモリがなければ処理は続行できないという切実な意志をシステムに伝える意味もあり、システムはこのAPIが呼ばれたときにメモリが不足していても安易に異常終了させずに、アプリを少しの間sleepにして、その間にユーザーに対して、このままだと続行できないけどどうするか?何か他の重要ではないアプリを終了させるか?と問い合わせてくる可能性もある。 | | --このAPIはメモリがなければ処理は続行できないという切実な意志をシステムに伝える意味もあり、システムはこのAPIが呼ばれたときにメモリが不足していても安易に異常終了させずに、アプリを少しの間sleepにして、その間にユーザーに対して、このままだと続行できないけどどうするか?何か他の重要ではないアプリを終了させるか?と問い合わせてくる可能性もある。 |
| --そういう事情により、このAPIを呼んだ場合しばらくアプリに帰ってこられない場合もありうる。それが困る場合は、上記のjg01_malloc()を使用すること。 | | --そういう事情により、このAPIを呼んだ場合しばらくアプリに帰ってこられない場合もありうる。それが困る場合は、上記のjg01_malloc()を使用すること。 |
| + | --このファンクションでもらったメモリは原則としてデータ用で、ページに実行可能属性を付与されることは保証していない。 |
| -[000009] void jg01_mfree(int bytes, void *p) | | -[000009] void jg01_mfree(int bytes, void *p) |
| --jg01_malloc()でもらったメモリを返す。部分的に返すこともできるし、bssの一部などもらってないメモリを返すこともできる。pが-1だと何もしない。アプリの終了時にはメモリは勝手に返されるので、終了処理中にmfreeする必要はない。 | | --jg01_malloc()でもらったメモリを返す。部分的に返すこともできるし、bssの一部などもらってないメモリを返すこともできる。pが-1だと何もしない。アプリの終了時にはメモリは勝手に返されるので、終了処理中にmfreeする必要はない。 |
| --ちなみにefg01のひどい手抜き実装だと、mfreeが何もしないということもありうる(苦笑)。 | | --ちなみにefg01のひどい手抜き実装だと、mfreeが何もしないということもありうる(苦笑)。 |