Utworzenie nowego stringu w zaczynającego się pod określonym adresem i o określonej długości.
Ostatnio zmodyfikowano 2022-06-03 20:56
Masterofironfist Temat założony przez niniejszego użytkownika |
Utworzenie nowego stringu w zaczynającego się pod określonym adresem i o określonej długości. » 2022-06-03 14:22:19 char * buffer = new char[ 5120 ]; for( int i = 0; i < 5120; ++i ) * buffer[ i ] = '\0'; void draw( char * buffer, some other arguments ) { string * forPrint = new( buffer ) string; forPrint->reserve( 5100 ); for() { for() { } } printf( "%s", forPrint->c_str() ); }
delete[ ] buffer; buffer = nullptr; Witam mam takie pytanie odnośnie stringu czy dało by się wymusić aby taki oto string znalazł się w zarezerowwanym miejscu z odrazu i odrazu jeszcze miał rezerwacje miejsca żeby nie ruszał się poza zarezerwowane miejsce tablicą buffer, bo po sprawdzeniu adresu ostatniego elementu stringu widac że nie jest on w miejscu zarezerwowanym przez tablice buffer. |
|
DejaVu |
» 2022-06-03 14:43:44 Jeżeli zaalokujesz raz pamięć i jej nie będziesz zwalniał to dane umieszczone będą dostępne zawsze pod tym samym adresem pamięci. |
|
Masterofironfist Temat założony przez niniejszego użytkownika |
» 2022-06-03 14:50:53 Czyli rozumiem zamiast alokowac ten bufor mam na początku programu poza jego pętlą główną poprostu zrobić string.reserve(5120) i po prostu wrzucać coś i wyrzucać z tego stringu aż do końca programu? |
|
pekfos |
» 2022-06-03 18:58:03 Ten kod ma wyciek pamięci, bo tak utworzony string nie jest nigdy zniszczony. Czyli rozumiem zamiast alokowac ten bufor mam na początku programu poza jego pętlą główną poprostu zrobić string.reserve(5120) i po prostu wrzucać coś i wyrzucać z tego stringu aż do końca programu? reserve() jest zbędne. Jeśli używasz cały czas tego samego obiektu, ilość zarezerwowanej pamięci będzie rosnąć według potrzeb. Kilka realokacji w skali całego programu jest nieistotne i może nawet tańsze niż szacowanie pamięci z góry, jeśli nie jest stała. Jeśli nie chodzi o wydajność, tylko konkretnie stały adres, std::string nie jest właściwym wyborem. |
|
Masterofironfist Temat założony przez niniejszego użytkownika |
» 2022-06-03 20:56:52 1. mogę użyć string Reserve nieco bardziej precyzyjnie bo wiem dokładnie jak dużo pamięci mi potrzeba rozmiar planszy gry + wszystkich komunikatów do wyświetlenia. 2. Ten program poprzedni był błędny bo niepotrzebnie zabrałem się za tą rezerwacje poprzez char * zamiast odrazu string.reserve(). 3. Ten string jest mi potrzebny do wyświetlenia planszy gry żeby wszystko za 1 wywołaniem funkcji printf () wyświetlić dzięki czemu program zaczął pracować ponad 2 razy szybciej co jest dużym plusem jak jeszcze nad tym programem podłubie może jeszcze trochę wydajności zyskam. |
|
« 1 » |