Я нахожусь в середине этого C-проекта, который я хочу сделать очень эффективным с точки зрения памяти. В некоторых случаях я использую void * s динамической структуры массива, которую я написал, для хранения битов. Я хочу использовать все 64 (в данном случае) биты.
Я скоро понял, что на самом деле вы не можете делать какие-либо битовые манипуляции с указателем. Поэтому мое решение было следующим:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
Это делает работу, но только потому, что на моем компьютере long и указатели имеют одинаковый размер. Будет ли это иметь место во всех (или большинстве) архитектур?
И мой настоящий вопрос: Есть ли более правильный способ манипулирования битами с указателем? Я думал, что этот подход несколько распространен в C (упаковка битов в пустоту *), но я мог ошибаться ...