私はこのCプロジェクトの真っ最中で、メモリを非常に効率的にしたいと考えています。いくつかのケースでは、ビットを保持するために記述した動的配列構造の void * を使用しています。64 (この場合) ビットすべてを使用したいと考えています。
私はすぐに、実際にはポインターに対してビット操作を行うことができないことに気付きました。だから私の解決策は次のとおりでした:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
これで仕事は完了しますが、それは私のコンピューターでは long とポインターのサイズが等しいためです。これは、すべての (またはほとんどの) アーキテクチャに当てはまりますか?
そして私の本当の質問:ポインターでビット操作を行うためのより正しい方法はありますか? このアプローチは C ではやや一般的 (ビットを void * にパックする) だと思っていましたが、間違っている可能性があります...