Pytania otagowane jako memory-alignment

8
Cel wyrównania pamięci
Trzeba przyznać, że nie rozumiem. Załóżmy, że masz pamięć ze słowem o długości 1 bajta. Dlaczego nie można uzyskać dostępu do 4-bajtowej zmiennej w pojedynczym dostępie do pamięci na niezaangażowanym adresie (tzn. Nie można podzielić przez 4), jak ma to miejsce w przypadku wyrównanych adresów?

16
Ciekawe przykłady niestandardowych alokatorów w C ++?
Jakie są naprawdę dobre powody, aby zrezygnować std::allocatorz niestandardowego rozwiązania? Czy spotkałeś się z sytuacjami, w których było to absolutnie konieczne dla poprawności, wydajności, skalowalności itp.? Jakieś naprawdę sprytne przykłady? Niestandardowe podzielniki zawsze były cechą Biblioteki Standardowej, której nie potrzebowałem. Zastanawiałem się tylko, czy ktoś tutaj na SO mógłby podać …

4
Dlaczego wyrównanie struktury zależy od tego, czy typ pola jest pierwotny, czy zdefiniowany przez użytkownika?
W Noda Time v2 przechodzimy do rozdzielczości nanosekundowej. Oznacza to, że nie możemy już używać 8-bajtowej liczby całkowitej do reprezentowania całego zakresu czasu, który nas interesuje. To skłoniło mnie do zbadania wykorzystania pamięci przez (wiele) struktur czasu Noda, co z kolei doprowadziło mnie do aby odkryć niewielką dziwność w decyzji …

4
Czy zmienne stosu są wyrównane przez GCC __attribute __ ((aligned (x)))?
mam następujący kod: #include <stdio.h> int main(void) { float a[4] __attribute__((aligned(0x1000))) = {1.0, 2.0, 3.0, 4.0}; printf("%p %p %p %p\n", &a[0], &a[1], &a[2], &a[3]); } Mam następujący wynik: 0x7fffbfcd2da0 0x7fffbfcd2da4 0x7fffbfcd2da8 0x7fffbfcd2dac Dlaczego adres a[0]nie jest wielokrotnością 0x1000? Co dokładnie __attribute__((aligned(x)))robi? Źle zrozumiałem to wyjaśnienie? Używam gcc 4.1.2.

4
Wyrównanie pamięci: jak używać alignof / alignas?
Obecnie pracuję z pamięcią współdzieloną. Nie rozumiem alignofi alignas. cppreference jest niejasne: alignofzwraca „wyrównanie”, ale co to jest „wyrównanie”? liczba bajtów do dodania dla następnego bloku do wyrównania? wyściełany rozmiar? Przepełnienie stosu / wpisy na blogach również są niejasne. Czy ktoś może wyjaśnić jasno alignofi alignas?

2
Dlaczego adresy argc i argv 12 bajtów są oddzielone?
Na swoim komputerze uruchomiłem następujący program (64-bitowy Intel z systemem Linux). #include <stdio.h> void test(int argc, char **argv) { printf("[test] Argc Pointer: %p\n", &argc); printf("[test] Argv Pointer: %p\n", &argv); } int main(int argc, char **argv) { printf("Argc Pointer: %p\n", &argc); printf("Argv Pointer: %p\n", &argv); printf("Size of &argc: %lu\n", sizeof (&argc)); …

1
Nowoczesne podejście do przydzielania wyrównanej pamięci std :: vector
Następujące pytanie związane jest jednak odpowiedzi są stare, i komentarz od użytkownika Marc Glisse sugeruje nowych podejść od C ++ 17 do tego problemu, które nie mogą być należycie rozpatrzone. Próbuję uzyskać wyrównaną pamięć działającą poprawnie dla SIMD, wciąż mając dostęp do wszystkich danych. W przypadku Intela, jeśli utworzę wektor …
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.