"new char[x]" alokuje zbyt dużo pamięci
Ostatnio zmodyfikowano 2014-10-12 22:12
pekfos |
» 2014-10-12 11:02:33 Jak byś użył std::vector to byś dostał wyjątek out_of_range. |
Ale tylko przy dobieraniu się do elementów przez at() ;) |
|
Elaine |
» 2014-10-12 17:55:56 System Windows/Unix przydziela zazwyczaj nie mniej niż krotność 4 bajtów |
Na typowych platformach to bardziej wielokrotności czterech lub ośmiu kilobajtów, i wszelki podział na mniejsze bloki jest już dokonowany przez sam program, system się do tego nie wtrąca. Oczywiście może się wydawać, że to system, bo systemy zazwyczaj mają jakąś domyślną implementację malloc, ale to jest zwyczajny kod trybu użytkownika i nic nie stoi na przeszkodzie, by całkiem to olać i użyć własnej implementacji, która zamiast wyrównywać rozmiary bloków do ośmiu lub szesnastu bajtów nie będzie wyrównywać ich wcale. Jakby kogoś ciekawiło, jak się takie rzeczy robi, to gdzieś na dysku mam jedną całkiem przyzwoitą implementację malloc (no, prawie, interfejs free się nieco różni) w ~300 liniach C++, mogę ją wrzucić i opisać. |
|
DejaVu |
» 2014-10-12 21:53:53 Mnie by interesowało :P |
|
ison |
» 2014-10-12 22:12:26 Mnie również. |
|
1 « 2 » |