Desidero memorizzare diversi tipi di dati nella stessa memoria allocata per ridurre il tempo di esecuzione allocando la memoria una sola volta. Ho scoperto che è effettivamente possibile creare un array di variabili uint8_t
e creare un nuovo puntatore uint16_t
sullo stesso indirizzo di memoria e quindi posso leggere i valori in entrambi i modi.Va bene memorizzare diversi tipi di dati nella stessa memoria allocata in C?
Ciò mi consente di creare un puntatore diciamo al centro della memoria allocata e di memorizzare i valori nella seconda metà in un diverso tipo di dati.
Va bene così? So che devo occuparmi dei limiti della memoria, ma questo è un cattivo stile?
Ecco il mio codice:
#include <stdio.h>
#include <inttypes.h>
#include <stdint.h>
#include <stdlib.h>
int main(void){
uint8_t *array;
uint16_t *array2;
array = calloc(6, 1);
array[0] = 257;
printf("array[0]= %" PRIu8 "\n", array[0]);
printf("array[1]= %" PRIu8 "\n", array[1]);
printf("Adresse von array[0] = %p\n", &array[0]);
array2 = &array[0];
printf("Adresse auf die array2 zeigt = %p\n", array2);
array2[0] = 257;
printf("array2[0]= %" PRIu16 "\n", array2[0]);
printf("array2[1]= %" PRIu16 "\n", array2[1]);
printf("array[0]= %" PRIu8 "\n", array[0]);
printf("array[1]= %" PRIu8 "\n", array[1]);
getchar();
return 0;
}
leggi su unione –
Ma in realtà non si memorizzano dada di tipi di dati diversi nella stessa memoria allocata. – ameyCU
Effettuare questa operazione manualmente è una cattiva pratica poiché i tipi di dati potrebbero avere requisiti di allineamento della memoria diversi. Usa un 'unione'. – kfx