Sono nel mezzo di questo progetto C che desidero rendere molto efficiente la memoria. In molti casi, sto usando il void * s di una struttura di array dinamica che ho scritto per contenere bit. Vorrei usare tutti i 64 bit (in questo caso).Il bit si sposta su un puntatore C?
Mi sono subito reso conto che non è possibile eseguire alcuna manipolazione di bit su un puntatore. Così la mia soluzione era il seguente:
void *p;
((unsigned long)p) << 4;
((unsigned long)p) & 3;
Questo ottiene il lavoro fatto, ma solo perché sul mio computer, anela e puntatori sono uguali in termini di dimensioni. Sarà questo il caso in tutte (o la maggior parte) delle architetture?
E la mia vera domanda: Esiste un modo più corretto di manipolare i bit su un puntatore? Avevo pensato che questo approccio era un po 'comune in C (imballaggio bit in un void *), ma potrei essere scambiato ...
Vorrei usare uint64_t invece di stdint.h – sambowry
uint64_t sarebbe troppo grande se la tua piattaforma ha meno di puntatori a 64 bit. Usa intptr_t e uintptr_t dalla stessa intestazione. – tgamblin
@sambowry - Sembra che tu debba passare attraverso 'stdint.h' un po 'più vicino. –