トップページ > プログラム > 2016年05月03日 > CPxVolRD

書き込み順位&時間帯一覧

6 位/182 ID中時間01234567891011121314151617181920212223Total
書き込み数0000000000000001000020014



使用した名前一覧書き込んだスレッド一覧
◆tAo.kQ2STk
デフォルトの名無しさん
データ構造,アルゴリズム,デザインパターン総合スレ 2
スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net

書き込みレス一覧

データ構造,アルゴリズム,デザインパターン総合スレ 2
915 : ◆tAo.kQ2STk [sage]:2016/05/03(火) 15:46:52.15 ID:CPxVolRD
ちょっとOS書いてるんだけど

可変長かつ連続したメモリ領域が本当に必要になるケースはOSレベルではそんなに無いって事を仮定して
・メモリ全体を1つ16バイトのチャンクに分ける
・各チャンクのアドレスの下4ビットが常に0になるので、普段はアドレスを4ビット右シフトした値を識別子として保持する
としてアロケータを組んでみてます。

32ビットの識別子で36ビット(64GiB)の空間を扱えるって利点の他に
x86_64のglibc mallocが1確保に対し管理領域として追加で8 Bytes消費するのと比較して、
こちらは16バイトの確保に対して管理領域として1ビット必要なので
glibc mallocで1024バイトの連続した領域を確保するのと同じ利用効率になり、かつ
「ポインタ」の保存に必要な領域が半減するという利点があります。

アドレスの算出にシフト演算が必要な点と、
基本的なデータ構造(list, set, map, hash, ...)を
1個16バイトのチャンクの組み合わせとして表現するのがちょっと手間である事
連続したメモリ領域の確保に別なアロケータが必要である事が主な欠点です。

実際には、4KiB単位の連続したメモリ領域をアロケータが面白みもない方法で確保して、
その中身をチャンクとして分割し、先頭2チャンクを管理領域にして確保/開放を行うという実装にしています。
連続したメモリ領域が本当に必要でも、4KiBあれば十分と今は仮定しています。

こういう方法ってこのスレ的には既出?
スレ立てるまでもない質問はここで 142匹目 [無断転載禁止]©2ch.net
752 : ◆tAo.kQ2STk [sage]:2016/05/03(火) 20:27:07.89 ID:CPxVolRD
>>750
64 bit版Windows上ではどうやっても「直接」16 bitのバイナリファイルは実行できないよ。
Virtual Boxなりbochsなりqemuなりを使って仮想環境を作って、
その環境に32 bit版のWindowsかMS-DOSか何かをインストールするのが良いと思う。
あと英語は慣れましょう。

# 俺は片山さんじゃないけども
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
645 :デフォルトの名無しさん[sage]:2016/05/03(火) 20:35:35.92 ID:CPxVolRD
>>644
確認したけど、The C Programming Languageには
真なら1になるって一応書いてあった
スレを勃てるまでもないC/C++の質問はここで 24 [転載禁止]©2ch.net
647 :デフォルトの名無しさん[sage]:2016/05/03(火) 23:32:54.81 ID:CPxVolRD
Basic系だとif文中の=は等価演算子になる方言もあるし
Lisp系やPascal系だと=は等価演算子になる
そういった言語を触ってると時々取り違えるかな。
俺は10年近くやってて多分2回くらい間違えてる。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。