てすてす@2年半ぶり
そろそろプライベート用と仕事用のブログを分けようかな。
こっちにPFIの事をいろいろ書いていくか。
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
- 作者: Marshall Kirk Neville-Neil, George V. McKusick
- 出版社/メーカー: Addison-Wesley Professional
- 発売日: 2004/08/02
- メディア: ハードカバー
- クリック: 3回
- この商品を含むブログ (6件) を見る
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)でやるにはポインタからサイズを取得する必要が有るので、こういう事が出来るのは当り前か。
java.util.concurrent
こんなパッケージが有ったのか。バイトでthread-safeなQueueを書いたのに。ConcurrentLinkedQueueを使えば一瞬。