ブログ移転

なんとなく自鯖Movable Typeを設置してみたので、こちらに移転します。

はてなからのデータ移行が上手く行かなかったので記事はこのまま残しておきますが、そのうち消えるかもしれません。

今後ここに記事を書くことは無いです。

アンテナやRSSリーダーに登録して頂いている方には申し訳ないですが、再度登録をお願い致します。

新しいブログのフィードはこちらです。

ICFP

id:yoira君とICFP参戦中。残り24時間を切った。残り18時間になってid:ushioda氏も参戦。これは心強い。

      • -


結果は1056点で大体UMを通した350チーム中70位ぐらいという結果でした。2日目まで全く連携が取れずにひたすら一人で作業してたのが結構きつかった。3日目にBlack挑戦したけど良いアルゴリズムが思いつかず、1000点まで届かず点数が伸び悩み。id:ushiodaさんももうちょっと早く参戦してたら2dのレイトレース通せたかもなぁ...。あんまりふるわなかったけど、楽しかったから良し!

途中鼻血3回ぐらい出ました。普段ほとんど出ないのに。なんなんだ...。ALFEで鉄分補給しときました。

BSD本

Design and Implementation of the FreeBSD Operating System, The

Design and Implementation of the FreeBSD Operating System, The

11章(Interprocess Communication)を読みながらちょっと調べ物をしていたら発見。有り難く参考にさせて頂こう。ネットワーク周りは数学屋さんも興味が有るんですねー。

mallocされた領域のサイズを動的に知る

大体のallocatorでheader fieldが有るのでこういう事ができるはず。下の方のbitはフラグに使われてたりするのでアラインメントに合わせてクリアする。

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    size_t *buf = (size_t*)malloc(2048);
    size_t size = *(buf - 1);
    printf("size = %d\n", size & ~0xf);

    size_t *buf1 = (size_t*)malloc(1);
    size_t size1 = *(buf1 - 1);
    printf("size = %d\n", size1 & ~0xf);
}
vmkzk% gcc mallocheader.c; ./a.out
size = 2048
size = 16

64bit環境の人は適当に変えて下さい (id:kosakiさんのアドバイスにより変更)。しかしよく考えればfreeをO(1)でやるにはポインタからサイズを取得する必要が有るので、こういう事が出来るのは当り前か。