2016 - 03 - 04 マシンスタックをコピペするのはやめたほうがいい Picrinでcall/cc周りのissueが届いた。masterが linux 環境でsegvを起こすらしい。発生条件は2つで、-O2で コンパイル することとcall/ccを使うこと。 Mac では大丈夫っていうのもアレだけれども-O2をつけた時だけっていうのもなかなか味わい深い。 とりあえずcallccのコードを眺めてみる。基本的には scheme VM のスタックとマシンスタックをがばっとコピーしてヒープに保存しているだけ。残りの処理は scheme の手続き化するためのもの。 static pic_value pic_callcc(pic_state *pic, pic_value proc) { struct fullcont *cont = pic_malloc(pic, sizeof(struct
![マシンスタックをコピペするのはやめたほうがいい - wasabizの日記](https://cdn-ak-scissors.b.st-hatena.com/image/square/480da69fc380548bfcb674382743df300f377c24/height=288;version=1;width=512/http%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fw%2Fwasabiz%2F20160304%2F20160304033419.png)