-
Data: 2015-12-04 09:43:18
Temat: Re: Pakowanie struktur
Od: Tomasz Kaczanowski <kaczus@dowyciecia_poczta.onet.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2015-12-03 16:08, M.M. pisze:
> On Thursday, December 3, 2015 at 3:05:24 PM UTC+1, Tomasz Kaczanowski wrote:
>> W dniu 2015-12-03 15:00, M.M. pisze:
>>> On Thursday, December 3, 2015 at 2:34:00 PM UTC+1, Tomasz Kaczanowski wrote:
>>>> W dniu 2015-12-03 14:08, M.M. pisze:
>>>>> On Thursday, December 3, 2015 at 1:09:14 PM UTC+1, Tomasz Kaczanowski wrote:
>>>>>
>>>>>> i gdzieniegdzie będzie mały bum, bo *((int*)(buf+2)); może mieć zdziebko
>>>>>> inną zawartość, niż nam się wydaje,
>>>>>
>>>>> Nie rozumiem. W jakich sytuacjach może mieć inną zawartość? Na moje
>>>>> albo reprezentacja bitowa się zgadza, albo nie. Jeśli nie, to w
>>>>> ogóle nie można używać kopiowania bitów.
>>>>
>>>> Tam gdzie zmienne muszą mieć wyrównane adresy. O ile w przypadku
>>>> spakowanej struktury przy odczycie kompilator wykona za nas odpowiednie
>>>> operacje, to w takim przypadku, gdy rzutujesz dane spod adresu, mówisz
>>>> kompilatorowi "wiem co robię, nie wtrącaj się", a, że wynik może w takim
>>>> przypadku być inny, cóż...
>>>
>>> To przy operacji:
>>> *((int*)(buf+2))
>>> kompilator nie wygeneruje takiego samego kodu jak przy wypakowaniu
>>> inta przesuniętego o 2 bajty w strukturze? Myślałem że na danej
>>> platformie kompilator bezpiecznie przerzuci dane na wyrównany adres i
>>> dopiero potem zacznie operować na tych danych.
>>
>>
>> z doświadczenia wiem, że nie poprawne było dopiero
>>
>> int zmienna;
>> memcpy(zmienna, (buf+2), sizeof(int));
>
>
> Jeśli wcześniej było:
> memcpy( buf+2 ,&zmienna , sizeof(int) );
> To też nie widzę zagrożenia. Rozmawiamy rzecz jasna o zgodnym formacie
> na poziomie bitów.
Cały czas zakładam zgodność bitów i endianów, bo inaczej żadne z tych
nie byłoby prawidłowe.
> Gdy ktoś upakował dane przy pomocy memcpy, a potem odzyskuje przez:
> *((int*)(buf+2))
> to obawiam się, że nie zawsze zadziała, o ile się nie mylę, to zadziała
> tylko na bigendian.
Nie - to zadziała, tam, gdzie jedyne wyrównanie odnośnie adresów dla
zmiennych jest adres parzysty, a to nie musi być prawdą. Przykład
częściej wysypujący się, to jeśli pierwsza dana będzie char, a następna
int. Wtedy będzie nieparzysty adres i na większej ilości
systemów/sprzętów zadziała to nieprawidłowo. Endianowość może co
najwyżej zmniejszyć efekt w niektórych wypadkach, ale nie zagwarantuje
ogólnie poprawnego działania.
Oczywiście pomijam fakt, ze wszelkie struktury transportowe winno raczej
opisywać się przez int32_t itp, wtedy mamy przynajmniej wielkość
zagwarantowaną.
--
Kaczus
http://kaczus.ppa.pl
Następne wpisy z tego wątku
- 04.12.15 14:18 Maciej Sobczak
- 04.12.15 21:26 M.M.
- 07.12.15 10:14 Tomasz Kaczanowski
- 07.12.15 12:02 M.M.
- 07.12.15 15:12 Maciej Sobczak
- 07.12.15 15:40 M.M.
- 07.12.15 16:22 witek
- 07.12.15 17:05 M.M.
- 07.12.15 18:40 witek
- 07.12.15 19:03 Sebastian Biały
- 07.12.15 19:29 M.M.
- 07.12.15 19:41 M.M.
- 07.12.15 19:55 witek
- 07.12.15 20:06 M.M.
- 07.12.15 20:25 witek
Najnowsze wątki z tej grupy
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
Najnowsze wątki
- 2025-01-29 Ostrów Wielkopolski => Area Sales Manager OZE <=
- 2025-01-29 Warszawa => Architekt rozwiązań (doświadczenie w obszarze Java, AWS
- 2025-01-29 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-29 Poznań => Specjalista ds. Employer Brandingu <=
- 2025-01-29 Warszawa => Developer Microsoft Dynamics 365 Finance & Operations (D36
- 2025-01-29 Warszawa => Junior Rekruter <=
- 2025-01-29 Warszawa => Mid IT Recruiter <=
- 2025-01-29 Białystok => UX Designer <=
- 2025-01-29 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2025-01-29 Warszawa => Expert Recruiter 360 <=
- 2025-01-29 Zdalny podpis
- 2025-01-29 Nazbyt "muzyczne" słuchawki
- 2025-01-29 Warszawa => QA Engineer <=
- 2025-01-29 Prawo jak je [nie]rząd rozumie.
- 2025-01-29 Gdańsk => Specjalista ds. Sprzedaży <=