Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Waga tablicy, struktura

Ostatnio zmodyfikowano 2014-06-22 11:55
Autor Wiadomość
tukan
Temat założony przez niniejszego użytkownika
Waga tablicy, struktura
» 2014-06-18 09:47:01
Witam,

Mam takie pytanie:
*Język to C*

Jest powiedziane, że wszystkie pola są wyrównywane do adresu będącego wielokrotnością rozmiaru pola. Ile bajtów zajmuje tablica t w architekturze 32-bitowej, a ile 64 -bitowej



typedef struct {
long a;
int b;
short c[2][16];
}T;

T t[10]

}
 
I nie bardzo wiem jak na to pytanie odpowiedzieć. Może ktoś wytłumaczyć ?
P-112217
Monika90
» 2014-06-18 10:05:26
Nie wiadomo. Nie wystarczy wiedzieć czy jest to architektura 32 czy 64-bitowa, np. w 64-bitowym Windows long zajmuje 4 bajty, a w 64-bitowym Linuksie 8. A w ogóle, należałoby zacząć od tego, co rozumiesz przez bajt?
P-112218
tukan
Temat założony przez niniejszego użytkownika
» 2014-06-21 19:42:29
Powiem Ci jakie założenia biorę:


Jako bajt rozumiem 8 bitów.


        32 bit        64  bit
long     4             8
short    2             2
int      4             4

Te wagi podałem w BAJTACH
P-112475
DejaVu
» 2014-06-21 20:14:23
A co to za problem wpisać sizeof(struktura)?
P-112476
pekfos
» 2014-06-21 22:14:17
A co to za problem wpisać sizeof(struktura)?
Bo to nie takie proste ;)
Jest powiedziane, że wszystkie pola są wyrównywane do adresu będącego wielokrotnością rozmiaru pola. Ile bajtów zajmuje tablica t w architekturze 32-bitowej, a ile 64 -bitowej
I nie bardzo wiem jak na to pytanie odpowiedzieć.
Nie pyta nas bezpośrednio, tylko chce pomocy w odpowiedzi na te pytanie. Znaczy dostał na studiach (w szkole?) takie pytanie od wykładowcy/nauczyciela i pewnie ma podać konkretną wartość. I pewnie sam wykładowca nie zna takich kruczków C, by wiedzieć, że nie można tu wyznaczyć konkretnej wartości.

        32 bit        64  bit
long     4             8
short    2             2
int      4             4
Ty bierzesz takie założenia, czy są podane do zadania?
P-112481
akwes
» 2014-06-22 00:14:43
Normalnie jakbym słyszał moich wykładowców... Ile będzie ważyć struktura, który argument funkcji pierwszy się ewaluuje, jaki wynik będzie kombinacji ++i z i++.

Aby się dowiedzieć ile waży tablica musimy znać rozmiar struktury, aby poznać rozmiar struktury musimy poznać rozmiar jej składowych oraz zasady według jakich kompilator będzie wyrównywał ich pozycję. O składowych wiemy tyle, że:
long ma co najmniej 32 bity,
int ma co najmniej 16 bitów,
short również ma co najmniej 16 bitów.

Co za tym idzie: short[2][16] będzie miał 16*2*16 co nam daje 512 bitów. Do tego dochodzi 32 bity od long i 16 bitów od int: w sumie 560 bitów.

Oznacza to, że taka struktura waży co najmniej 560 bitów czyli 70 bajtów, a cała tablica co najmniej 700 bajtów. Wyrównywanie nie zmniejszy rozmiaru a jedynie zwiększy jeżeli takowe wystąpi.

Ile będzie ważyć maksymalnie? Nie wiadomo :) A dlaczego? Ponieważ standard C będzie spełniał nawet taki kompilator, który będzie dla każdego typu danych dawać 64 bajty (i więcej też). Jedyne co możemy powiedzieć to to, że na takiej architekturze z takim kompilatorem ta struktura waży tyle i tyle. I będzie to prawdziwe jedynie dla tej architektury i tego kompilatora. Oczywiście rozmiary mogą się powtórzyć na innych architekturach i innych kompilatorach - co więcej, nawet na pewno się powtórzą - ale nie będzie to zasada.

Jeżeli tabelka, którą podałeś jest częścią zadania to a) dlaczego jej nie podałeś na początku? b) dlaczego sam nie posumujesz pól struktury? c) czy zadanie wspomina coś o wyrównywaniu pól?
P-112488
pekfos
» 2014-06-22 11:00:38
O składowych wiemy tyle, że:
long ma co najmniej 32 bity,
int ma co najmniej 16 bitów,
short również ma co najmniej 16 bitów.
Miło by było. Standard mówi tylko, że w ciągu signed char, short int, int, long int i long long int, każdy typ ma rozmiar co najmniej taki, jak poprzedni.
P-112491
Monika90
» 2014-06-22 11:55:29
Standard gwarantuje, że char ma co najmniej 8, short i int co najmniej 16, long co najmniej 32, a long long co najmniej 64 bity.

czy zadanie wspomina coś o wyrównywaniu pól?
no przecież napisał że
wszystkie pola są wyrównywane do adresu będącego wielokrotnością rozmiaru pola.
P-112493
« 1 »
  Strona 1 z 1