OT:programovani v C

Miroslav Šinko sinkomiro@gmail.com
Úterý Červen 16 00:37:31 CEST 2009


Odbocka od sizeof, take pojednanie o memcpy...

Pekne sme sa na memcpy popalili pri vyvoji pre WinCE na platforme
ARM4T. Tento procesor vyzaduje 32-bit pristup do pamati zarovnany na 4
byte. Majme lokalne premenne typu poli DWORD-ov v nezarovnanych
strukturach, t.j. aj na adresach nedelitelnych 4. Pouzime na ne
memcpy... Kym sme sa hrali na debug verzii bez optimalizacii, vsetko
behalo k spokojnosti. Ako sme urobili optimalizovany release, zamrzol
cely "geret" komplet aky je aj s celym OS, kde bol nas konkretny
proces iba suciastkou skladacky.
Co sa stalo.. neoptimalizovana verzia memcpy kopirovala byte po byte -
OK; optimalizovana chcela nacitat celych 32-bit do 32-bit registra. Z
adresy nedelitelnej 4 to proste nejde. Riesenim je explicitne
pretypovanie memcpy((BYTE*)dw1, (BYTE*)dw2, sizeof(array)); alebo
prisne pouzivat zarovnane struktury, co vsak pri roznych datovych
elementoch definovanych v protokoloch 3. stran nie vzdy ide.

miro



Další informace o konferenci Hw-list