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

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

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

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

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

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

Диапазон значений - C++
Числу B нужно присвоить значение в зависимости от того, какое значение у числа А, но проблема в том, что конкретного значения числа А нет....

Диапазон значений в switch - C++
Доброго времени суток. Совсем детский вопрос наверное, но. Как сделать в кейсе диапазон значений, как в делфи 'A'..'Z'?

Диапазон значений массива. - C++
Подскажите, пожалуйста, не пойму задачи. В программе из листинга указан же диапазон, и ar указатель... #include <iostream> using...

Выход за диапазон значений - C++
Как грамотно проверить выход за диапазон значений при операциях возведение в степень, квадратный корень, умножить, делить, плюс, минус....

Как проверить диапазон значений? - C++
Как в С++ проверить диапазон значений. например : 0<=k<=35.

Диапазон значений для переменных - C++
Всем привет. Недавно начал изучать язык с++ и возник вопрос при решении задачи. Как на языке с/с++ задать конкретный промежуток значений...

как понять Диапазон принимаемых значений? - C++
Помогите пожалуйста я не могу понять слово Диапазон принимаемых значений! Заранее Спасибо!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Убежденный
Системный программист
Эксперт С++
15295 / 6927 / 1096
Регистрация: 02.05.2013
Сообщений: 11,334
Завершенные тесты: 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
Убежденный
Системный программист
Эксперт С++
15295 / 6927 / 1096
Регистрация: 02.05.2013
Сообщений: 11,334
Завершенные тесты: 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
Эксперт С++
4881 / 3017 / 370
Регистрация: 10.11.2010
Сообщений: 11,076
Записей в блоге: 10
Завершенные тесты: 1
27.10.2013, 16:10     Диапазон значений указателей #6
Цитата Сообщение от Асурус Посмотреть сообщение
Например, может ли int* иметь нечётное значение(подсказка: подумайте о выравнивании)?"
Может. Но в целях повышения производительности переменные стоит выравнивать по размеру их типа.
Убежденный
Системный программист
Эксперт С++
15295 / 6927 / 1096
Регистрация: 02.05.2013
Сообщений: 11,334
Завершенные тесты: 1
27.10.2013, 16:27     Диапазон значений указателей #7
Цитата Сообщение от Асурус Посмотреть сообщение
Каковы на вашей системе ограничения на значение указателей типа char*, int*, void*?
Указатель может принимать любые значения, которые укладываются в его диапазон.
Например, если sizeof (void *) == 4, то это будет диапазон [0 ... 2^32-1].
Другой вопрос в том, что читать и писать в память можно не по всему диапазону, а
лишь используя строго ограниченные поддиапазоны. Например, приложениям в режиме
пользователя недоступна память ядра.

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

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

Проверка чисел на диапазон допустимых значений - C++
Всем привет! Мне нужно вывести количество введенных чисел и количество чисел, которые принадлежат промежутку. Проблема в том, что функция,...

Обмен значений 2 указателей в функции - C++
Добрый вечер всем. Хочу при помощи функции менять адреса двух указателей. Вот код: #include <iostream> using namespace std; ...

Взаимный обмен значений указателей в параметрах функции - C++
Необходимо создать шаблонную функцию void f(int *x, float *y) в которой *х - указатель на массив, состоящий из целых чисел, *у -...

Запросить с консоли целое число и проверить его на попадание в заданный диапазон значений - C++
Задания 1. Запросить с консоли целое число и проверить его на попадание в заданный диапазон значений. Результат такой проверки вывести на...

Переделать код так, чтобы использовались диапазоны значений с помощью указателей - C++
Мне уже стыдно сюда писать ей богу :wall: . Но есть задача переделать Код№1 так чтобы использовались диапазоны значений с помощью...


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

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

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