0 / 0 / 0
Регистрация: 19.11.2016
Сообщений: 26
1

Работа оператора Sizeof

04.12.2016, 01:20. Показов 2372. Ответов 14
Метки нет (Все метки)

Каким образом вычисляется размер, допустим, массива int mass[5] ? Где-то в памяти хранится размер, и оператор просто его оттуда вытаскивает, или же в конце массива есть байт\слово\двойное слово, хранящее размер? Или же при компиляции sizeof преобразуется в некотрое значение ?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2016, 01:20
Ответы с готовыми решениями:

Нюансы использования оператора sizeof()
Пусть T - это некоторой тип, а t - это переменная типа T. Может ли когда-нибудь выражение...

Sizeof(.) или constexpr size_t tmp = sizeof(.)
sizeof(...) или constexpr size_t tmp = sizeof(...) Как лучше с точки зрения производительности?...

Неправильная работа оператора присваивания после работы оператора суммирования
Доброго времени суток. У меня есть класс вектор class TVector {//ewde public: TVector();...

динамическое созданный массив и работа sizeof
создаю массив потом пытаюсь определить размер массива unsigned int *filtr = new unsigned int ;...

14
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
04.12.2016, 03:16 2
nucrea, размер известен на стадии компиляции.
0
Почетный модератор
Эксперт С++
5850 / 2861 / 392
Регистрация: 01.11.2011
Сообщений: 6,905
09.12.2016, 14:49 3
Цитата Сообщение от nucrea Посмотреть сообщение
Каким образом вычисляется размер, допустим, массива int mass[5] ?
Конкретный компилятор реализует данный вопрос одному только ему известным образом (например, размещает размер перед указателем на первый элемент массива). Конкретная реализация sizeof для этого же компилятора знает где глядеть размер.
0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
09.12.2016, 15:20 4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конкретный компилятор реализует данный вопрос одному только ему известным образом (например, размещает размер перед указателем на первый элемент массива)
Какой-то бред. Зачем компилятору куда-то размещать константу, если можно просто sizeof заменить на константу?
1
Диссидент
Эксперт C
27197 / 16952 / 3747
Регистрация: 24.12.2010
Сообщений: 38,134
09.12.2016, 22:10 5
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конкретный компилятор реализует данный вопрос одному только ему известным образом (например, размещает размер перед указателем на первый элемент массива)
Это другой вопрос. Это вопрос - сколько выделяется динамической памяти. Чтобы затем эту память освободить и вернуть в пространство свободной. Но это никак не совпадает с sizeof
C++
1
2
3
char *s = malloc(1000);  // выделяется 1000 байт и ... еще немножко для служебной информации
cout << sizeof(s);  // 4 (условно, для 32-разрядной архитектуры)
cout << sizeof(*s);  // 1
0
GbaLog-
09.12.2016, 23:26
  #6

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
C++
1
char *s = malloc(1000);
Надеюсь это псевдокод, иначе не скомпилируется. :)

0
Вездепух
Эксперт CЭксперт С++
10425 / 5696 / 1551
Регистрация: 18.10.2014
Сообщений: 14,048
10.12.2016, 00:10 7
Цитата Сообщение от nucrea Посмотреть сообщение
Каким образом вычисляется размер, допустим, массива int mass[5] ?
Очень просто: 5 умножается на размер int - вот и готов размер.

Цитата Сообщение от nucrea Посмотреть сообщение
Где-то в памяти хранится размер, и оператор просто его оттуда вытаскивает,
Зачем его где-то "хранить"? Результат sizeof - константа времени компиляции. На стадии компиляции все размеры и так известны.

Цитата Сообщение от nucrea Посмотреть сообщение
Или же при компиляции sizeof преобразуется в некотрое значение ?
Именно так.

Цитата Сообщение от SatanaXIII Посмотреть сообщение
Конкретный компилятор реализует данный вопрос одному только ему известным образом (например, размещает размер перед указателем на первый элемент массива). Конкретная реализация sizeof для этого же компилятора знает где глядеть размер.
Это не имеет абсолютно никакого отношения к оператору sizeof. Оператор sizeof никогда не пытается где-то "глядеть размер".
1
nd2
10.12.2016, 01:03
  #8

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
Надеюсь это псевдокод, иначе не скомпилируется.
Для Си допустимо.

0
GbaLog-
10.12.2016, 01:14
  #9

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
Для Си допустимо.
Да, но мы в С++ ветке форума.

0
TheCalligrapher
10.12.2016, 01:16
  #10

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
Для Си допустимо.
В С и sizeof может оказаться оператором времени выполнения. С - это совсем другая опера.

0
nd2
10.12.2016, 01:20
  #11

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
Да, но мы в С++ ветке форума.
Неужели? Что тогда здесь делают коды из WinAPI?

0
GbaLog-
10.12.2016, 01:50
  #12

Не по теме:


Цитата Сообщение от nd2 Посмотреть сообщение
Неужели?
Я вроде не ошибаюсь.
Кликните здесь для просмотра всего текста
Работа оператора Sizeof

Цитата Сообщение от nd2 Посмотреть сообщение
Что тогда здесь делают коды из WinAPI?
А какое это имеет отношение к данной теме?

0
nd2
10.12.2016, 02:17
  #13

Не по теме:

Цитата Сообщение от GbaLog- Посмотреть сообщение
А какое это имеет отношение к данной теме?
А какое отношение к данной теме имеет:
Цитата Сообщение от GbaLog- Посмотреть сообщение
Надеюсь это псевдокод, иначе не скомпилируется.
?

0
Evg
Эксперт CАвтор FAQ
21264 / 8280 / 637
Регистрация: 30.03.2009
Сообщений: 22,635
Записей в блоге: 30
10.12.2016, 11:49 14
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В С и sizeof может оказаться оператором времени выполнения.
Действительно, у VLA размер выясняется только в runtime. К теме несколько не относится, но для самообразования людям знать полезно

В GNU C/C++ и C99 (и в последующих стандартах) есть такая байда как VLA - Variable Length Arrays: https://gcc.gnu.org/onlinedocs... ength.html. Так вот sizoef от такого массива НЕ является константой компиляции, а является выражением вида "размер одного элемента помножить на динамически вычисленный размер"
1
GbaLog-
10.12.2016, 14:44     Работа оператора Sizeof
  #15

Не по теме:

Цитата Сообщение от nd2 Посмотреть сообщение
А какое отношение к данной теме имеет
Ну я бы мог притянуть его за уши, но давайте будем считать это моей ошибкой и закончим этот спор.

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2016, 14:44

Fwrite (buffer , sizeof(char), sizeof(buffer), pFile)
как записать часть массива чаров? допустим у нас arr; мне надо записать с позиции массива 500 до...

sizeof( char * ) & sizeof(char)
Здравствуйте, не могу понять почему sizeof(char *) = 4 а sizeof(char) = 1. Ну с последним ясно , а...

Работа с матрицами n-го порядка без использования условного оператора.
Для заданной матрицы n-го порядка найти такие k, что k-я строка совпадает с k-м столбцом. для...

Избыточное копирование объекта при реализации оператора умножения и оператора присваивания
Есть класс работы с матрицами. Есть операция умножения матриц, описанная как оператор класса. В...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru