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

[C++] Kopiowanie pamięci

Ostatnio zmodyfikowano 2016-05-04 14:31
Autor Wiadomość
Gibas11
Temat założony przez niniejszego użytkownika
[C++] Kopiowanie pamięci
» 2016-05-04 13:16:44
Hej,
Mam taki skrawek kodu:
C/C++
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ś:
C/C++
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.
P-147923
Monika90
» 2016-05-04 14:03:40
C/C++
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...
P-147926
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ą.
P-147927
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.
P-147929
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ę. ;)
P-147930
« 1 »
  Strona 1 z 1