Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 19:49   #1
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию std::string

Решил поинтересоваться насчет реализации данного класса - почему объект всегда весит 32 байта, не зависимо от длины строки? И где тогда хранится строка? Получается, что она по факту хранится в куче, т.е. в свободной памяти, и создана с помощью new или может быть malloc?

Кто-нибудь, объясните плз
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 23.01.2010, 20:05   #2
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от RoS Посмотреть сообщение
Решил поинтересоваться насчет реализации данного класса - почему объект всегда весит 32 байта, не зависимо от длины строки? И где тогда хранится строка? Получается, что она по факту хранится в куче, т.е. в свободной памяти, и создана с помощью new или может быть malloc?

Кто-нибудь, объясните плз
Естественно string хранит всё в куче, как же иначе? )
netrino вне форума Ответить с цитированием
Старый 23.01.2010, 20:20   #3
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Иначе в стеке, как, например, переменную какую-нибудь простую int или char...
Так ну суть вопроса не раскрыта - реализацию можно узнать?
И почему тогда именно 32 байта? на какие данные уходят эти 32 байта? Эмм...скажем, пара указателей, может длина...Узнать можно где-нибудь?

З.Ы. ну согласитесь, на эту тему приятнее беседовать, чем обсуждать студентческие задачи на логику или просто темы типа "СПАСИТЕ ЭКЗМЕН ЗАВТРА" ))))))
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 23.01.2010, 20:32   #4
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

реализация строки не стандартизирована, поэтому внутренности реализации зависят от разработчиков. можно и в четире байта уложиться, а можно и в 32.
Например в строке от майкрософта был внутренний буффер (что-нидубь типа char internalBuffer[16] на несколько символов, что позволяло не выделять память до тех пор пока строка была короткой.
_Ч_ вне форума Ответить с цитированием
Старый 23.01.2010, 20:34   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от RoS Посмотреть сообщение
Иначе в стеке, как, например, переменную какую-нибудь простую int или char...
Так ну суть вопроса не раскрыта - реализацию можно узнать?
И почему тогда именно 32 байта? на какие данные уходят эти 32 байта? Эмм...скажем, пара указателей, может длина...Узнать можно где-нибудь?

З.Ы. ну согласитесь, на эту тему приятнее беседовать, чем обсуждать студентческие задачи на логику или просто темы типа "СПАСИТЕ ЭКЗМЕН ЗАВТРА" ))))))
Реализацию можете посмотреть в файле string ) Я свои глаза ломать об этот кошмар не хочу ) Вкратце, string это тайпдеф над шаблоном basic_string, он принимает в качестве параметра тип символа(char или wchar_t) В стеке никак не сделать, иначе не доступны будут операции конкатенации и всё такое
netrino вне форума Ответить с цитированием
Старый 23.01.2010, 20:40   #6
RoS
Форумчанин
 
Аватар для RoS
 
Регистрация: 13.12.2009
Сообщений: 272
По умолчанию

Цитата:
Сообщение от netrino Посмотреть сообщение
Реализацию можете посмотреть в файле string ) Я свои глаза ломать об этот кошмар не хочу ) Вкратце, string это тайпдеф над шаблоном basic_string, он принимает в качестве параметра тип символа(char или wchar_t) В стеке никак не сделать, иначе не доступны будут операции конкатенации и всё такое
Т.е. есть обыкновенный и юникодный вариант строки? а wstring это синоним basic_string<wchar_t>?

Эх ну вобщем реализация останется под завесой тайны, в принципе она не была критична, главное было убедиться в теории насчет кучи
Если я помог вам - порадуйте меня, нажмите на весы слева
RoS вне форума Ответить с цитированием
Старый 23.01.2010, 21:21   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Цитата:
Сообщение от RoS Посмотреть сообщение
Т.е. есть обыкновенный и юникодный вариант строки? а wstring это синоним basic_string<wchar_t>?
Именно так. Если интересно, то можете почитать Страуструпа, он примерно описывает устройство стандартных контейнеров STL.
netrino вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
E2015 Ambiguity between 'std::log(double)' and 'std::log(long double)' Namolem Помощь студентам 3 02.04.2011 20:22
Как получить адрес String строки или преобразовать String madboy4ik Общие вопросы по Java, Java SE, Kotlin 6 15.01.2010 11:57
функция для подсчета количества символов в строке типа std::string a Артэс Общие вопросы C/C++ 3 06.07.2009 17:43
std::vector ciaonataha Общие вопросы C/C++ 1 10.05.2009 15:50
std Викдон Общие вопросы C/C++ 3 17.02.2009 11:33