Per esempio, se si dispone di un programma diLo standard C++ garantisce che i valori letterali stringa siano memorizzati nel programma binario non adulterato?
int main()
{
const char* str = "1111111111111111111111111111111111111111111";
printf("%s", str);
return 0;
}
e si compila, se si cerca il binario generato per "1111111111111111111111111111111111111111111", (ignorando questioni come la codifica), siete garantiti per trovare, o è è consentito al compilatore di generare codice che, ad esempio, assegna memoria heap, lo riempie con "1" utilizzando un ciclo e quindi corregge tutti i riferimenti a quella stringa letterale per puntare alla memoria heap? (e poi assicura che venga deallocato al momento giusto, bla bla)
Dubito che ci sia qualche implementazione che in realtà faccia questo ... ma sarebbe conforme agli standard se lo facesse?
Nulla lo garantisce. L'unica cosa che lo standard (sto osservando in una bozza di lavoro del 2005 dal momento che nessuno è senza soldi per il libro di testo ...) è il contenuto di stringhe letterali (siano esse strette o larghe), il loro tipo, la loro durata di archiviazione , sequenze di escape e concatenazione di stringhe letterali adiacenti. Vedi [2.13.4 qui] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf). –