W malloc (x) biblioteki libc funkcja zwraca wskaźnik do obszaru pamięci o wartości co najmniej x bajtów, a wskaźnik jest wyrównany do 8 bajtów. Co oznacza to wyrównanie? Dziękuję Ci.Kiedy zwraca malloc, co oznacza 8-bajtowe wyrównanie?
Odpowiedz
Oznacza to, że spiczasty adres mod 8 0:
pointer % 8 == 0
To może być ważne dla operacji niskiego poziomu, gdzie może to wpłynąć Poprawność lub sprawność. Zobacz także this answer.
Oznacza to, że pamięć zaczyna się na adres, który jest wielokrotnością 8.
Jak, dlaczego byś nawet Care: Dla pamięci, która nie jest wyrównany, CPU czasami wymaga dwóch dostępów to wszystko przeczytać. W niektórych przypadkach nawet nie spróbuje i po prostu rzuci błąd. Wzmianka o "wyrównaniu do 8 bajtów" polega na tym, że osoba dzwoniąca wie, czy będzie musiała zrobić fudging wskaźnika, czy nie.
(Zazwyczaj nie będzie obchodziło - kompilator zajmuje większość kwestii wyrównania dla ciebie Ale informacji tam w przypadku trzeba go z jakiegoś powodu.).
wyrównanie pamięci opisuje moduł adresów. Tak więc 8 bajtowe wyrównanie oznacza, że adresy są wielokrotnościami ośmiu.
Było to krytyczne dla wielu starszych systemów, w których adresy wymagały wyrównania na granicy słowa, często wielokrotności czterech bajtów lub dwóch bajtów. Jeśli nie został prawidłowo wyrównany, program uległ awarii z "błędem wyrównania".
Nowsze maszyny rozwiązują ten problem przez ładowanie z dowolnego adresu, ale często oznacza to, że ładowanie danych zajmuje kilka cykli.
- 1. Co zwraca; (bez wartości) oznacza?
- 2. C - zwraca wskaźnik char bez malloc
- 3. Co oznacza (+ var) oznacza
- 4. Kiedy należy używać posix_memalign zamiast malloc?
- 5. Co oznacza "::"?
- 6. Kiedy Registry.CreateSubKey zwraca zero?
- 7. Co oznacza "char (* p) [5];"?
- 8. Co znaczy: co oznacza?
- 9. Co oznacza = *?
- 10. Kotlin: Co oznacza "return @"?
- 11. Co oznacza xmlns = "" dokładnie oznacza
- 12. co oznacza „$ &” oznacza w Ruby
- 13. Co oznacza "! []" Składnia wiązu w Todomvc oznacza
- 14. Co = ~ oznacza w Perl
- 15. Kiedy ThreadPool.QueueUserWorkItem zwraca false
- 16. Co oznacza "192.168.1.1/21"?
- 17. Co oznacza "[to]" oznacza w języku C++
- 18. NSLog 10b co oznacza?
- 19. Co oznacza to ostrzeżenie?
- 20. Co oznacza podpisanie ClickOnce?
- 21. Kiedy usługa GoogleGlayServicesAvailable zwraca usługę SERVICE_VERSION_UPDATE_REQUIRED?
- 22. Co oznacza funkcja dir() Pythona?
- 23. Co oznacza ten kod C++?
- 24. Co oznacza iterator-> drugi?
- 25. co oznacza aspekt w Solr?
- 26. Co oznacza 0x0F? A co oznacza ten kod?
- 27. Co oznacza "CL" w komunikacie zatwierdzenia? Co to oznacza?
- 28. Co oznaczają nazwy katalogów "." i ".." oznacza i co oznacza faDirectory?
- 29. Co oznacza "?", Używane po nazwie pliku JavaScript, co oznacza?
- 30. Co oznacza "Dwuznaczne przekierowanie wyjścia"?
Należy zadbać o wyrównanie bajtów, aby procesor mógł wydajnie odczytać adres pamięci. Niezrównane bloki pamięci powodują błędy magistrali. Zobacz sekcję Unaligned Access tutaj -> http://pl.wikipedia.org/wiki/Segmentation_fault#Bus_error –