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