![]() |
|
Модераторы: bsa |
![]()
|
|
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
1) char *x = "asdq" – в данном случае значением указателя является адрес переменной в сегменте данных, который получаем во время компиляции? Правильно я понял? 2) А если переменная не глобальная? fun() { char x1[5] = "aaaa"; char *x = "asdq"; } При вызове функции "aaaa" помещается в стек, после, строка "asdq". Значением x является вершина стека? т.е. стек выглядит так? значение адрес asdq 04 aaaa 05 х = 04? |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
почти .. во время компиляции получаем смещение, а реальный адрес получается в момент рантайма, путем прибавления смещения к адрессу сегмента. во время компиляции эти строки ложатся в сегмент данных, а в рантайме указатели инициализируются адресом этой строки, а массивы данными той строки из сегмента данных. стек выглядит примерно так : нач.адреес значение кон.адрес 00 asdq\0 04 // x1[5] = 05 0x.... 08 // где 0х... адрес строки 5 байт на массив, и 4 на указатель (для обычных (х86) 32хбитных машин, при условии отсутствия выравнивания на стеке.. но это смысла не меняет) Это сообщение отредактировал(а) mes - 1.2.2009, 13:19 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
вовсе не обязательно, в случе с указателем строка может быть помещена в любой read only сегмент, а может и не быть помещена. Во втором случе я вообще причн не вижу хранить строку, оставить ее в стеке и не марать сегмент данных вовсе. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
||||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Посоветуйте, что можно почитать по данной теме.
|
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
а причем тут рантайм? это не рантайм |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
mes, хз как у С++ а в делфи константы кладутся в сегмент кода, сразу за телом функции в которой они используются
|
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
инициализация массива x1(заполнение стека) происходит в рантайме.
также, зависит от компилятора и места где определены данные (глобально или в функции) в нашем случае сегмент данных, и данные в сегменте кода означает одно и то же, "данные хранящиеся в теле "ехешника" " и с точки зрения языка неразличимы. Это сообщение отредактировал(а) mes - 1.2.2009, 14:43 |
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Посоветуйте литературу по данной теме.
Это сообщение отредактировал(а) lv151 - 1.2.2009, 15:16 |
|||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
давай не будет понятия подменять, нет там никакого рантайма. Все известно на этапе компиляции. с точик зрения языка вообще никаких сегментов нет, так, что ты изначально не прав. Добавлено через 1 минуту и 1 секунду книжки по С\С++ любые, огбсуждения книжек идут в прикрепленном топике |
|||
|
||||
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
||||
|
||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
||||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
давай.. и так когда происходит создание и инициализация массива ? размер которого и содержание (точнее сказать образ) известны на этапе компиляции.
я про обязательное наличие сегментов и не утверждал, было лишь употреблено для легкого понимания не вид, ни место хранения данных, которыми заполняется массив не важен. Важно, что компилятор сохраняет строку в теле программы в "удобном" (зависимом от контекста использования) виде, и 1. при создании массива использует содержимое этой строки для инициализации стека, 2 а при инициализации указателя используется адрес этой строки |
||||
|
|||||
| vinter |
|
|||
![]() Explorer ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2735 Регистрация: 1.4.2006 Где: Н.Новгород Репутация: 8 Всего: 56 |
в рантайме, но для языка это рантаймом не является потому, как не зависит ни от каких внешних факторов и всегда статично. |
|||
|
||||
| mes |
|
||||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 79 Всего: 250 |
т.е инициализация стека происходит в рантайме, но рантаймом не является.. так ? интересно.. так данные в стек помещаются на этапе компиляции ? если нет , то откуда берутся ? или я неправильно трактую Ваше высказывание ? :
Это сообщение отредактировал(а) mes - 1.2.2009, 16:38 |
||||
|
|||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |