マルチプロセッサプログラミングの技術p215では、Cではポインタからビットを「盗む」ことができ、ビット単位の演算子を使用するとフラグ(マーク)を抽出し、単一の単語からのポインタ。私はこれがどのように行われたのかわからないので、例が私を助けます。ポインタからビットを盗む
答えて
ポインタサイズが32ビットのシステムを想定していますが、1GBのメモリしか使用できません。メモリ空間全体を扱うのに30ビットしか必要ないので、上位2ビットは使用されません。これらの上位2ビットは、ポインタタイプ(スタック/グローバル/ダイナミック)でポインタをマークするなど、独自の目的に使用できます。
結果として得られるコードは、移植可能なほどの移植性がないことに注意してください。あなたのコードが実行されているCPUに精通している必要があります。具体的には、ポインタからのアドレスがアドレスバスに送られたときに上位ビットがドロップされるかどうかを知る必要があります。
これは、68000ベースのシステムでは、アドレス空間がわずか24ビットであるため、非常に一般的でした.32ビットアドレスの上位8ビットは、さまざまなフラグに安全に使用できました。 1980年代の元々のMac OSは、ロックされた、消去可能な、リソースフラグのためにこのトリックを使いました。 –
すべてのポインタが偶数になるようにpointeeオブジェクトがメモリ内で整列されていることを確認します。最後のビットは、単一のブール値フラグを格納するために解放されます。
ポインターをタイプ
uintptr_t
の整数として動かしてください(これは完全に移植可能ではありません)。これらは、簡単に操作することができます。bool get_flag(uintptr_t p) { return p & 1; } void *get_pointer(uintptr_t p) { return (void *)(p & (UINTPTR_MAX^1)); } uintptr_t set_flag(uintptr_t p, bool value) { return (p & (UINTPTR_MAX^1)) | value; }
どのようにJavaで同じを達成するのですか? – arunmoezhi
JavaはNanny言語です.... Nannyはあなたにそれをさせませんでした:-P – WhiZTiM
Javaでは、同じ機能(共有オブジェクトへのアクセスを同期させることを意図しています)はAtomicMarkableReference'クラスで利用できます。今日のナニーは、過去千年とは違って... –
- 1. 情報をWordPressに盗む
- 2. フォーカスを盗むことから通知ウィンドウを停止する
- 3. 人がサイトからファイルを盗むのを止める
- 4. 私のアプリケーションがフォーカスを盗む
- 5. Android - ICS - ハードウェアアクセラレーションがOpenGLテクスチャを盗む
- 6. OmnithreadLibraryは "仕事を盗む"をサポートしていますか?
- 7. OnTouchEventはOnClickから盗みます。
- 8. テキストファイルからポインタ配列を読み込む方法は?
- 9. のSolaris 64ビット関数ポインタの問題
- 10. JavaScriptを使用してsinonでコンストラクタを盗む
- 11. コントロールがフォーカスを盗むのを防ぐには?
- 12. フォーカスを盗むことなくダイアログコントロールを使用する
- 13. フォーカスを盗むことなくユーザーの注目を集める
- 14. 8ビットから16ビットへの変換
- 15. iOSマルチタスキングスワイプのようなタッチを盗むジェスチャー
- 16. パスワードを盗む間の詐欺の特定
- 17. Spring Root Controllerを盗む他のJUnitテストを中止するにはどうしたらいいですか?
- 18. なぜアクセストークンを盗むことができないのですか?
- 19. (Ruby、Rails、Javascript)サーバーを盗むことなくドラッグアンドドロップできますか?
- 20. アンドロイド/ iphoneアプリは連絡先とSMSを盗むことができますか?
- 21. ポインタからのshared_ptr
- 22. UITableViewCell内のUIButtonがUITableViewからタッチを盗みます
- 23. sammy.jsから '実際のリンク'を盗まれない
- 24. runAllManagedModulesForAllRequestsは、isapiハンドラからhttpポストリクエストパラメータを盗みます。
- 25. GoSmsはalertDialogからフォーカスを盗みます
- 26. データベースコンテンツを「盗聴」から保護する(Ajax)
- 27. 窃盗からAndroid電話を保護する
- 28. MKAnnotationViewはMKMapViewからタッチを盗みます。
- 29. サイトから盗難経緯度値を保護する方法
- 30. ポインタからイテレータを取得
本当にそうする正当な理由がない限り、これは悪い習慣が一般的であることを知っておくと便利かもしれません。 – Mysticial
@Mysticial:動的言語を実装するのが一般的です。 –
@Mysticial:ある単語にアトムを実行する必要があるときがあります。 –