Devo implementare una versione ottimizzata di malloc/realloc/free (adattata per la mia particolare applicazione). Al momento il codice gira su una piattaforma particolare, ma mi piacerebbe scriverlo in modo portabile, se possibile (la piattaforma potrebbe cambiare in futuro), o almeno vorrei concentrare le possibili differenze di piattaforma in un singolo punto (probabilmente a .h). Sono a conoscenza di alcuni dei problemi:Come gestire gli allineamenti della memoria e l'aritmetica dei puntatori generici in modo portatile in C?
- differenze di allineamento memoria
- differenze di dimensioni minime blocchi di memoria adatto per l'assegnazione "generica"
- differenze di dimensioni puntatore
(I' Ignoreremo le differenze nei servizi di sistema di base per l'allocazione di memoria qui, poiché su alcuni sistemi embedded potrebbero non essere affatto disponibili Immaginiamo di lavorare su un grande blocco di memoria preallocato da utilizzare come "heap").
La domanda (s):
- Esistono macro standard o funzioni in C per questo tipo di scopo?
- Quali altri problemi posso affrontare in questo lavoro?
Grazie! L'uso di _Alignof & friends (e l'implementazione in un file specifico della piattaforma se l'SDK non lo fa) è il modo più pulito. –
L'OP chiede codice portatile e la tua risposta è C11 Per quanto ne so, non c'è ancora alcun supporto per il compilatore in questo campo, anzi, molti compilatori non supportano nemmeno il C99. probabilmente un certo modo per rendere il codice non portatile per i prossimi 5-10 anni o così. – Lundin
@Lundin, non dico che dovrebbe usarlo, dico che dovrebbe emularlo, queste sono le interfacce con cui andare Il supporto per C11 arriverà molto più rapidamente rispetto a C99, aggiungendo fondamentalmente funzionalità già presenti (come questo, allineamento) o altre facoltative (come VLA, thread o atomics). –