Per incorporare i file di dati direttamente in un eseguibile, ci sono diverse cose da considerare.
Se i dati non sono necessari, saranno caricati? Se il tuo programma ha sempre bisogno dei dati, la risposta è "no". Inoltre, per la maggior parte dei SO il file eseguibile è mappato in memoria (dove le parti non vengono caricate fino a quando non vengono utilizzate), quindi la risposta potrebbe essere "no" in ogni caso. Se la risposta è "sì", incorporare i file di dati direttamente nell'eseguibile può aumentare il tempo di avvio e sprecare RAM.
I dati saranno necessari temporaneamente (ad esempio un'immagine che viene visualizzata solo all'avvio dell'applicazione)? In questo caso, vuoi liberare la memoria quando non ne hai più bisogno e può essere difficile / complicato liberare parte del file eseguibile.
C'è un limite di dimensioni del file eseguibile? Ad esempio, forse ha bisogno di lavorare su una sorta di sistema a 32 bit dove c'è un limite di dimensioni del file eseguibile di 2 GiB, e i dati che stai incorporando semplicemente non andranno bene.
Quanto bene lo gestiscono i tuoi strumenti? Per alcuni strumenti è estremamente facile inserire file binari arbitrari "come sono" in un file eseguibile o oggetto (ad esempio incbin
di NASM o direttiva .incbin
di GAS). Per altri strumenti può essere un problema al collo (ad esempio convertirlo in una matrice di byte che è possibile includere come codice sorgente solo in modo che il compilatore possa riconvertirlo in binario).
Quanto dovrebbe essere difficile per le persone modificare / modificare i dati? Questo può andare in entrambe le direzioni - forse vuoi rendere più semplice per gli altri membri del progetto (ad esempio artisti) modificare il file e incorporarlo è uno svantaggio; ma forse vuoi rendere difficile agli utenti finali modificare il file e incorporarlo è un vantaggio.
Quanto è difficile utilizzare effettivamente i dati incorporati? Per alcuni casi (ad es. Librerie che prevedono un nome file) l'incorporamento dei dati potrebbe causare un problema significativo.
Avrai una sorta di "auto-aggiornamento"? Se lo farai, sarebbe più efficiente avere più file più piccoli che possono essere aggiornati indipendentemente, piuttosto che un file di grandi dimensioni in cui non è possibile aggiornarne una parte e devi sostituire / aggiornare l'intero file.