tag:blogger.com,1999:blog-7005405814689884350.post5333050678335857332..comments2010-01-02T20:34:12.543+09:00Comments on mumumuの日記: [memo] malloc, free(3)mumumuhttp://www.blogger.com/profile/05886228487626859419noreply@blogger.comBlogger1125tag:blogger.com,1999:blog-7005405814689884350.post-11757154136393056652009-10-05T01:28:35.437+09:002009-10-05T01:28:35.437+09:00mallocしたときに、mallocされたデータに関する情報が配列データの直前にあるって聞いたような...mallocしたときに、mallocされたデータに関する情報が配列データの直前にあるって聞いたような気がして試してみました。<br /><br />-------- ここから<br />#include <stdio.h><br />#include <stdlib.h><br /><br />int main() {<br /> for (int i = 0; i < 16; ++i) {<br /> size_t* p = (size_t*)malloc(i * sizeof(size_t));<br /> printf("%u\n", (unsigned int)p[-1]);<br /> free(p);<br /> }<br /> return 0;<br />}<br />-------- ここまで<br /><br />結果は、うちのマシンでは<br />-------- ここから<br />33<br />33<br />33<br />33<br />49<br />49<br />65<br />65<br />81<br />81<br />97<br />97<br />113<br />113<br />129<br />129<br />-------- ここまで<br /><br />おそらく、「ヘッダサイズ(9Byte)+実際のデータサイズ」です。等差数列にはなっていないのでちょこっと工夫がされてるみたいですね。<br />reallocやってみると面白かったりするかもね。Anonymoushttps://www.blogger.com/profile/12566630607656997669noreply@blogger.com