[C++] Kopiowanie pamięci
Ostatnio zmodyfikowano 2016-05-04 14:31
Gibas11 Temat założony przez niniejszego użytkownika |
[C++] Kopiowanie pamięci » 2016-05-04 13:16:44 Hej, Mam taki skrawek kodu: sf::Int64 QResourceStream::read( void * data, sf::Int64 size ) { sf::Int64 i; for( i = 0; i < size && pos < this->size; i++, pos++ ) (( char * ) data )[ i ] =(( char * ) dat )[ pos ]; return i; }
I niby wszystko działa, ale wiem jak się skończy kopiowanie bajt po bajcie 500MB, wie ktoś może jak sprawnie zastąpić to używając memcpy albo czegoś w tym stylu? Naskrobałem takie coś: sf::Int64 QResourceStream::read( void * data, sf::Int64 size ) { sf::Int64 target = std::min( size, this->size ); memcpy( data, dat, target ); return target; }
Ale nie działa tak jakbym chciał (czyt. źle). Tak ogólnie to staram się napisać klasę dziedziczącą po sf::InputStream to obsługi zasobów Qt. Tutaj cały kod: github.com/KoczurekK/QSFML. |
|
Monika90 |
» 2016-05-04 14:03:40 sf::Int64 QResourceStream::read( void * data, sf::Int64 size ) { const auto count = std::min( size, this->size - pos ); std::memcpy( data, static_cast < char *>( dat ) + pos, count ); pos += count; return count; }
używaj na własne ryzyko... |
|
Gibas11 Temat założony przez niniejszego użytkownika |
» 2016-05-04 14:12:51 Dzięki wielkie, ale dlaczego na własne ryzyko? To co miałem wcześniej chyba działało na tej samej zasadzie a w każdym razie miało równie nikłą odporność na błędy związane z pamięcią. |
|
Monika90 |
» 2016-05-04 14:30:05 Pisząc taki kod łatwo się pomylić, nie wiem nawet czy powyższy kod jest poprawny, jego pierwsza wersja nie była. |
|
Gibas11 Temat założony przez niniejszego użytkownika |
» 2016-05-04 14:31:58 Działa dobrze, potem przetestuję całość Valgrindem i czymś jeszcze do monitora pamięci, napiszę tu jeżeli znajdą się błędy, bo sam i tak ich nie poprawię. ;) |
|
« 1 » |