Lessico IT › Programmazione › Strict aliasing

Strict aliasing

Programmazione Svenska → Aggiornato: 2026-10-02

La regola di C e C++ secondo cui un oggetto può essere letto solo tramite un tipo compatibile con quello con cui è stato creato. Se la si viola, il codice funziona senza ottimizzazione e si sfascia con essa.

Il vantaggio per il compilatore è sostanziale: autorizzato ad assumere che un puntatore a int e uno a float non puntino mai alla stessa memoria, può tenere i valori nei registri attraverso le scritture, vettorizzare i cicli e riordinare liberamente le letture. Senza questa assunzione ogni scrittura tramite un puntatore estraneo andrebbe trattata come una potenziale modifica di tutto. Il prezzo lo paga ogni codice che reinterpreta schemi di bit con il cast di un puntatore, una pratica quotidiana nel C degli anni Novanta che sopravvive in gran parte dell'elaborazione dei segnali e della serializzazione. Il sintomo è sgradevolmente caratteristico: tutto funziona nella build di debug e dà risultati errati in quella ottimizzata. Le vie lecite sono memcpy, le union in C e bit_cast nel C++ moderno. Il kernel Linux ha scelto invece di compilare con la regola disattivata.

← Torna al lessico