Aktywne Wpisy
Pwado +6
Nie wiem czy tez tak macie, ale jak patrze na ta gale to widze wiekszosc ludzi wytatuowanych - rece, ramiona, nogi, plecy, a nawet twarz. Zastanawiam sie po co? Dlaczego? Juz pomijac koszty to w takiej skali wyglada to przynajmniej niestetycznie. Rozumiem jeden/dwa tatuaze w srednio widocznych miejscach, ale takie cos to wg mnie jakis problem spoleczenstwa.
#famemma
#famemma
#programowanie
Pytanie zadałem, bo obiekt składający się z 3 elementowej tablicy double zwraca mi wielkość 24B, a obiekt innej klasy, który składa się z inta określającego rozmiar tablicy i wskaźnika na tablicę 3 elementową typu double 16B, dlaczego akurat 16?
@dratoo: dzięki, może się przydać
@BotRekrutacyjny: Tak. Rozmiar
int
a wedlug standaru to "co najmniej 16 bitów", tj. 2 bajty.@BotRekrutacyjny: Poszukaj za "struct padding" i "struct alignment". Na linuxa jest
pahole
ktory pokazuje ci uklad twojej struktury. Dla Visual Studio skompiluj z flaga/d1reportSingleClassLayoutXXX
, gdzieXXX
to nazwa twojej klasy lub/d1reportAllClassLayout
zeby zobaczyc wszystkie.Bo najwyrazniej twoj
double
ma rozmiar 8b.Bo twoj
int
ma rozmiar 8b, a wskaznik (obojetnie na jaki typ, no poza wskaznikami na metody w klasach) ma rozmiar najczesciej(?)int
a, czyli twoje@BotRekrutacyjny: No to pojawia sie struct padding.
struct X {
int x;
int *p;
}
4 bajty zajmuje int, 4 bajty paddingu (luka w strukturze, hole), 8bajtow zajmuje wskaznik.
struct X {
int *p;
int x;
}
powinienes dostac sizeof(X) == 12
pahole
po skompilowaniu clangiem https://pastebin.com/mb4d6D5J@Kaczus2B: @BotRekrutacyjny:
Jeszcze tylko dorzuce odpowiedni fragment standardu potwierdzajcy to co mowi @Kaczus2B https://eel.is/c++draft/basic.fundamental#1
nizej znajduje sie tabelka pokazujace minimalne wartosci dla typow.