stl string zajmowanie zasobów

0

Mam pewne pytanie związane ze stringami z biblioteki stl. Wydaje mi sie (i tak prawdopodobnie jest ;), że stringi alokują więcej pamięci dla napisów niż w rzeczywiście potrzebuja (z racji optymalizacji). Czy wie ktoś może czy da się taką opcję wyłączyć, tzn. żeby napis azjmował tyle miejsca ile faktycznie potrzebuje (bez zbędnego zapasu na przyszłość).

pozdrawiam,
MiloszeS

0

Poczytaj o funkcji string::reserve(uint), to jest to o co Ci chodzi. Pozdrawiam

0
miloszes napisał(a)

Mam pewne pytanie związane ze stringami z biblioteki stl. Wydaje mi sie (i tak prawdopodobnie jest ;), że stringi alokują więcej pamięci dla napisów niż w rzeczywiście potrzebuja (z racji optymalizacji). Czy wie ktoś może czy da się taką opcję wyłączyć, tzn. żeby napis azjmował tyle miejsca ile faktycznie potrzebuje (bez zbędnego zapasu na przyszłość).

Niekoniecznie masz rację...[ale raczej nie masz - chyba, że masz zwaloną implementację std::string -> Microsoft :D ]
Dopiero przy zwiększaniu rozmiaru nastąpi (dodatkowa) alokacja pamięci.

#include <string>
#include <iostream>
using namespace std;
int main()
{
    string a;
    cout << a.capacity() << endl; // 0
    string b( "tralala" );
    cout << b.capacity() << endl; // 7
    b+="jajko";
    cout << b.capacity() << endl; // 12
    // ALE:
    b = "nic";
    cout << b.capacity() << endl; // 12    
    // oraz:
    b.resize( 5 );
    cout << b.capacity() << endl; // 12    

    // na chama:
    b.reserve( 5 );
    cout << b.capacity() << endl; // 5
}

Dla MinGW:

0
7
12
12
12
5

Ale MSVC++ 6 SP6:

0
31
31
31
31
31

Ewidentnie zrypana implementacja(?); prawdopodobnie VC++ 7 (.NET czy cuś) ma OK (?).

Dla M$ nawet reserve() nie ma znaczenia :]
[edito: acha, bo to jest sugerowane przez standard, a nie wymagane
GCC 3.4 robi zmniejszenie przez reserve()
źródło: http://gcc.gnu.org/onlinedocs/libstdc++/21_strings/howto.html#6
]
Ale nie przejmuj się tym tak bardzo :>

0

hehe.

Właśnie mam implementacje z Visuala 6.0. W implementacji mają zmienną _MIN_VALUE która jest ustawiona na 31 :) i tocały problm :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1