Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
#1

Диапазон значений указателей - C++

27.10.2013, 14:52. Просмотров 865. Ответов 8
Метки нет (Все метки)

Здравствуйте! Подскажите пожалуйста, как узнать ограничения на значение указателей в системе?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2013, 14:52     Диапазон значений указателей
Посмотрите здесь:

Диапазон значений массива. C++
Диапазон значений C++
C++ Запросить с консоли целое число и проверить его на попадание в заданный диапазон значений
Обмен значений 2 указателей в функции C++
C++ Переделать код так, чтобы использовались диапазоны значений с помощью указателей
C++ как понять Диапазон принимаемых значений?
Как проверить диапазон значений? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15101 / 6796 / 1073
Регистрация: 02.05.2013
Сообщений: 11,108
Завершенные тесты: 1
27.10.2013, 15:02     Диапазон значений указателей #2
О каких ограничениях идет речь ? Можете привести пример ?
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
27.10.2013, 15:34     Диапазон значений указателей #3
Асурус, в 32-битных системах на адрес выделяется 32 бита, в 64-битных - соответственно, 64. Часть адресов зарезервированы системой.
Чаще всего программы компилят под 32 бита. Поэтому для простоты можно считать, что диапазон адресов совпадает с диапазоном значений unsigned int
Убежденный
Системный программист
Эксперт С++
15101 / 6796 / 1073
Регистрация: 02.05.2013
Сообщений: 11,108
Завершенные тесты: 1
27.10.2013, 15:46     Диапазон значений указателей #4
Асурус, если речь идет о Windows, то там есть, например, функция Get(Native)SystemInfo.
В структуре SYSTEM_INFO, которую она заполняет, присутствуют поля lpMinimumApplicationAddress и
lpMaximumApplicationAddress, хранящие минимальный и максимальный адреса, доступные для приложений.
Имейте в виду, что показатели, снятые в 32-битном и 64-битном процессе, будут различаться.
Асурус
2 / 2 / 1
Регистрация: 27.07.2012
Сообщений: 40
27.10.2013, 15:54  [ТС]     Диапазон значений указателей #5
Цитата Сообщение от Убежденный Посмотреть сообщение
О каких ограничениях идет речь ? Можете привести пример ?
Задание целиком: "Каковы на вашей системе ограничения на значение указателей типа char*, int*, void*? Например, может ли int* иметь нечётное значение(подсказка: подумайте о выравнивании)?"

Добавлено через 1 минуту
Убежденный, А как это в код превратить?

Добавлено через 2 минуты
I.M.,
У меня кажется 64bit-ная система, получается unsigned __int64?
castaway
Эксперт С++
4876 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 16:10     Диапазон значений указателей #6
Цитата Сообщение от Асурус Посмотреть сообщение
Например, может ли int* иметь нечётное значение(подсказка: подумайте о выравнивании)?"
Может. Но в целях повышения производительности переменные стоит выравнивать по размеру их типа.
Убежденный
Системный программист
Эксперт С++
15101 / 6796 / 1073
Регистрация: 02.05.2013
Сообщений: 11,108
Завершенные тесты: 1
27.10.2013, 16:27     Диапазон значений указателей #7
Цитата Сообщение от Асурус Посмотреть сообщение
Каковы на вашей системе ограничения на значение указателей типа char*, int*, void*?
Указатель может принимать любые значения, которые укладываются в его диапазон.
Например, если sizeof (void *) == 4, то это будет диапазон [0 ... 2^32-1].
Другой вопрос в том, что читать и писать в память можно не по всему диапазону, а
лишь используя строго ограниченные поддиапазоны. Например, приложениям в режиме
пользователя недоступна память ядра.

Цитата Сообщение от Асурус Посмотреть сообщение
подсказка: подумайте о выравнивании
На многих архитектурах можно вполне безопасно работать с невыровненными данными.
Правда, в таком случае будет некоторое снижение производительности (performance penalty).
Можно еще вспомнить про правила атомарности доступа, применяемые к невыровненным
данным, но это совсем другая тема.

Цитата Сообщение от Асурус Посмотреть сообщение
У меня кажется 64bit-ная система, получается unsigned __int64?
Это справедливо только для 64-битных программ.
castaway
Эксперт С++
4876 / 3015 / 370
Регистрация: 10.11.2010
Сообщений: 11,075
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 16:30     Диапазон значений указателей #8
Цитата Сообщение от Убежденный Посмотреть сообщение
На многих архитектурах можно вполне безопасно работать с невыровненными данными.
А я ошибусь, если скажу что в таком случае элементарная операция присваивания может быть не атомарной?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.10.2013, 16:34     Диапазон значений указателей
Еще ссылки по теме:

Написать программу,которая выводит таблицу значений функции >^(x-2)+(x+1). Диапазон изменения аргумента вводится пользователем так же как и шаг пригла C++
Взаимный обмен значений указателей в параметрах функции C++
Диапазон значений для переменных C++
Выход за диапазон значений C++
C++ Проверка чисел на диапазон допустимых значений

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

Или воспользуйтесь поиском по форуму:
Убежденный
Системный программист
Эксперт С++
15101 / 6796 / 1073
Регистрация: 02.05.2013
Сообщений: 11,108
Завершенные тесты: 1
27.10.2013, 16:34     Диапазон значений указателей #9
Цитата Сообщение от castaway Посмотреть сообщение
А я ошибусь, если скажу что в таком случае элементарная операция присваивания может быть не атомарной?
Intel в своих мануалах пишет, что доступ к невыровненным данным тоже атомарный,
но при условии, что они не пересекают границу кэша.
Yandex
Объявления
27.10.2013, 16:34     Диапазон значений указателей
Ответ Создать тему
Опции темы

Текущее время: 05:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru