Some hardware cannot read non-aligned data.
True.
For example Bitmap images
are aligned to 4-bytes from the header and with each scan line in
order to maintain device independence.
Ho un numero di punti da fare su questa frase:
-
L'organizzazione interna dei file bitmap non è un esempio di hardware che non è in grado di leggere i dati non allineati.
-
La parola "dispositivo" nel termine "indipendenza dispositivo" per bitmap si riferisce al display, non alla CPU. L'allineamento dei dati è un problema che la CPU deve affrontare.
-
Il motivo di questa organizzazione è non al fine di mantenere l'indipendenza del dispositivo. File Windows .BMP (suppongo che ciò che intendi per "immagini bitmap") siano allineati a 4 byte perché l'architettura x86 funzionerà al meglio quando legge i dati allineati. Può, tuttavia, leggere i dati non allineati. Semplicemente non funzionerà più velocemente.
For example you can cause an alignment fault by accessing unaligned
memory as per the example in the wiki. However, does this actually
hold true for files?
Sì e no. Ovviamente, una CPU non potrebbe importare di meno se un certo file che si trova sul disco è o non è allineato. Ma per fare in modo che il file sia di qualche utilità, sarà necessario caricarlo in memoria ad un certo punto, giusto? Ecco quando è utile l'allineamento corretto.
If I tried to read data from a binary file(like Bitmaps) at an
non-aligned index will this cause an alignment fault on certain
hardware?
Sì, lo sarà. Ma non su qualsiasi x86 o x64. Su un x86 e amp; x64 otterrai prestazioni non ottimali.
My guess is that it will because Bitmaps safeguard against
this,
Prendere le organizzazioni in formato file come suggerimenti sui potenziali comportamenti della CPU è fuorviante come prendere i colori della squadra di calcio come suggerimenti sulle decisioni di investimento in borsa.
however is it entirely necessary to take this precaution if I
want to make a binary file or even a piece of code to load that file
device independent?
Anche in questo caso, riguardante "Device Independent",
Suppongocheper"dispositivo indipendente" intendi "architettura hardware indipendente" (che in realtà significa "CPU indipendente"), quindi la risposta qui è che dipende da quanto tu vuoi essere indipendente.
-
Se vuoi essere completamente indipendente, non puoi assolutamente utilizzare i file binari.
-
Se vuoi essere moderatamente indipendente, procedi con il file binario, ma assicurati di utilizzare un allineamento di 4 o meglio ancora di 8.
-
Se vuoi essere solo ragionevolmente indipendente, ignora l'allineamento. È solo un file. Se qualcuno deve leggerlo su qualche hardware strano, può leggerlo byte per byte.