Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/2: Рейтинг темы: голосов - 2, средняя оценка - 4.50
mxs89
11 / 11 / 8
Регистрация: 13.04.2015
Сообщений: 159
Завершенные тесты: 1
1

Как/где размещаются строковые константы

06.09.2016, 20:49. Просмотров 458. Ответов 15
Метки нет (Все метки)

вызываю какую нибудь функцию и передаю туда текст, например
myfunc("some text")
когда выделяется память под текст? когда эта память освобождается?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2016, 20:49
Ответы с готовыми решениями:

Как задаются строковые константы?
Можете привести примеры

Строковые константы и указатели
Здравствуйте. Не работает следующий код из книги "С++. Шаг за шагом" (Дейтел): #include "pch.h"...

Хороший стиль программирования: где размещать константы?
Здравствуйте, уважаемые форумчане! Давно хотел спросить. У меня есть проект, состоящий из...

Размещаются ли члены в стеке?
Например, class TLongInteger {...

В какой последовательности размещаются массива
Помогите ответить на вопрос по контрольной: В какой последовательности размещаются в памяти...

15
nimazzzy
Заблокирован
06.09.2016, 20:53 2
Цитата Сообщение от mxs89 Посмотреть сообщение
когда выделяется память под текст?
С загрузкой приложения.
Цитата Сообщение от mxs89 Посмотреть сообщение
когда эта память освобождается?
Вместе с завершением приложения.
Размещается в области данных для чтения.
1
mxs89
11 / 11 / 8
Регистрация: 13.04.2015
Сообщений: 159
Завершенные тесты: 1
06.09.2016, 21:00  [ТС] 3
подскажите, допустим я создаю окно на winapi, там 4 раза, как минимум, использую строки типа класс и заголовок, получается, что 4 строки я храню в области чтения. я экономлю память, если после регистрации запомню идентификатор?

Добавлено через 2 минуты
т.е.
C++
1
2
3
4
5
6
7
wndclassex.classname = "class name"
createwindow("class name", "caption")
unregisterclass("class name")
 
atom = wndclassex.classname = "class name"
createwindow((LPSTR)atom, "caption")
unregisterclass((LPSTR)atom)
0
nimazzzy
Заблокирован
06.09.2016, 21:02 4
Цитата Сообщение от mxs89 Посмотреть сообщение
там 4 раза, как минимум, использую строки типа класс и заголовок
Что такое "строка типа класс"?
Цитата Сообщение от mxs89 Посмотреть сообщение
если после регистрации запомню идентификатор?
Какой регистрации? Регистрации чего? Идентификатор чего?
Одинаковые строки не дублируются в области данных.

Добавлено через 41 секунду
Цитата Сообщение от mxs89 Посмотреть сообщение
я экономлю память, если после регистрации запомню идентификатор?
Вижу код. Нет, не экономишь.
1
06.09.2016, 21:02
mxs89
11 / 11 / 8
Регистрация: 13.04.2015
Сообщений: 159
Завершенные тесты: 1
06.09.2016, 21:05  [ТС] 5
Цитата Сообщение от nimazzzy Посмотреть сообщение
Нет, не экономишь
почему? под строку выделяется больше памяти, чем под int, или я чего то не понимаю?

Добавлено через 37 секунд
а, так как в любом случае я выделяю память под строки
0
nimazzzy
Заблокирован
06.09.2016, 21:08 6
Цитата Сообщение от mxs89 Посмотреть сообщение
почему?
Ты уже строку используешь в коде, она в область памяти попала. В чем ты видишь дальнейшую экономию?
Цитата Сообщение от mxs89 Посмотреть сообщение
под строку выделяется больше памяти, чем под int, или я чего то не понимаю?
Эмммм...а при чем тут int?
0
mxs89
11 / 11 / 8
Регистрация: 13.04.2015
Сообщений: 159
Завершенные тесты: 1
06.09.2016, 21:16  [ТС] 7
Цитата Сообщение от nimazzzy Посмотреть сообщение
Эмммм...а при чем тут int
atom - short т.е.
0
nimazzzy
Заблокирован
06.09.2016, 21:20 8
Цитата Сообщение от mxs89 Посмотреть сообщение
atom - short т.е.
Ииии? Судя по тому, что ты его приводишь к
Цитата Сообщение от mxs89 Посмотреть сообщение
LPSTR
он у тебя выполняет волшебным образом роль указателя. Память экономишь? А куда у тебя тогда ссылается твой atom? В сэкономленную память?
0
mxs89
11 / 11 / 8
Регистрация: 13.04.2015
Сообщений: 159
Завершенные тесты: 1
06.09.2016, 22:18  [ТС] 9
это указатель на строку?
0
nimazzzy
Заблокирован
06.09.2016, 22:29 10
Цитата Сообщение от mxs89 Посмотреть сообщение
это указатель на строку?
Я не видел твой код, я не знаю, что это у тебя.
0
Evg
Эксперт CАвтор FAQ
19891 / 7522 / 574
Регистрация: 30.03.2009
Сообщений: 20,983
Записей в блоге: 30
06.09.2016, 22:39 11
На всякий случай
http://www.cyberforum.ru/blogs/18334/blog97.html
0
Operok
178 / 176 / 66
Регистрация: 15.02.2015
Сообщений: 511
Завершенные тесты: 2
07.09.2016, 09:28 12
Цитата Сообщение от mxs89 Посмотреть сообщение
т.е.
не надо так...
C++
1
2
3
LPCSTR szClassName = "class name";
LPCSTR szCaption = "caption";
//используем строки
а то после выполнения wndclassex.classname = "class name" нельзя гарантировать что по этому указателю останется таже строка.
0
Убежденный
Ушел с форума
Эксперт С++
16149 / 7296 / 1182
Регистрация: 02.05.2013
Сообщений: 11,637
Записей в блоге: 1
Завершенные тесты: 1
07.09.2016, 12:30 13
Цитата Сообщение от Operok Посмотреть сообщение
нельзя гарантировать что по этому указателю останется таже строка.
Можно.
Строковые литералы - static storage duration, поэтому такой код полностью безопасен.
1
rikimaru2013
C++ 2D
2496 / 1161 / 352
Регистрация: 30.11.2013
Сообщений: 3,753
07.09.2016, 13:03 14
А меня недавно поправляли, что нету гарантий, что адреса одинаковых строковых литералов будут одинаковые в при/после компиляции проекта. Но то, что сохранив адрес на строковый литерал - там всегда будет он - это правда
0
nimazzzy
Заблокирован
07.09.2016, 13:45 15
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
А меня недавно поправляли, что нету гарантий, что адреса одинаковых строковых литералов будут одинаковые в при/после компиляции проекта.
Конечно, если ты явно отключишь string pooling, то компилятор не будет заботиться об оптимизации памяти у одинаковых литералов. Для MS VC++ это опция /GF и /GF-.
0
rikimaru2013
C++ 2D
2496 / 1161 / 352
Регистрация: 30.11.2013
Сообщений: 3,753
07.09.2016, 14:03 16
nimazzzy, хорошо, что мы оба про переносимые, реализация-независимых вещах говорим)
0
07.09.2016, 14:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2016, 14:03

[trigraph] Как отключить? Как устранить триграф из литерной константы?
Доброго времени суток. Сборка Debug при помощи mingw482_32. Возникла проблема с триграфами. ...

Как понять указатель константы?
Добрый день! Почему *intarray++ не допускается. Если она константа/указатель константы (по лафоре)...

Как компилятор сохраняет константы?
Вопрос такой. Компилятор на этапе компиляции умножает константы в коде типа 1000 * 5, M_PI * 5 или...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru