Разработка, производство и продажа радиоэлектронной аппаратуры
|
Карта сайта
|
Пишите нам
|
В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:
jobsmp@pochta.ru
Телесистемы
|
Электроника
|
Конференция «Микроконтроллеры и их применение»
Господа! А Вы знаете, что из-за…
Отправлено
ТуамОсес
25 декабря 2006 г. 23:43
особенностей внутреннего представления многомерных массивов в C++, например, для хранения массива A[5][6][4] типа char потребуется не 5х6х4=120 байт, а
5*6*<длина указателя используемая в данном компиляторе для данной платформы> + 5х6х4 ??? Если длина указателя {т.е. количество памяти, резервируемой под указатель} равна 4, то получаем: 5х6х4 + 5х6х4 = 240 байт. Таким образом, имеем: 120 байт под, собственно, массив, и 120 байт под служебную информацию.
Так то вот.() Если взять больше размерностей массива типа CHAR – доля служебной инфы буде ещё больше.
26 декабря 2006 года 23-38. Пятница
©Доктор ТуамОсес inc.
Составить ответ
|
Вернуться на конференцию
Ответы
Плюс пять, Доктор, - плюс пять. Вы знаете, как завести толпу. Если после вступления ВТО електроникам придется мыть посуду, Вы не пропадете. Поприще культмассовых мероприятий ждет Вас на своих хлебных просторах...
—
Доктор Ливси
(26.12.2006 10:09:30
85.30.207.31
,
пустое
)
Ответ: Толпу??? Зачем же Вы обижаете уважаемого SM-а? ($-((((((....Не надо....На себя лучше посмотрите...Вы же православный христианин
—
ТуамОсес
(26.12.2006 10:57:57
82.204.230.43
,
пустое
)
И меня тоже...Вы обидели......"завести толпу".....Дурак...Я просто обсуждаю с УМНЫМИ людьми интересующие меня темы...Можь иногда и ошибаюсь...И буду рад если умные товарищи меня поправят
—
ТуамОсес
(26.12.2006 11:43:40
82.204.230.43
,
пустое
)
Не ошибается только тот кто никуя не делает....И ещё....Хорошо смеёцца тот, кто смеёцца последним
—
ТуамОсес
(26.12.2006 11:44:31
82.204.230.43
,
пустое
)
Доктор... Ну как же можно, Голуба... Не надо, Доктор, не надо...Не стоит бить себя ушами по щекам, заграница нам поможет.. Не расстраивайтесь, ведь я вовсе не хотел Вас обидеть. И Дурак я не разу не говорил Вам, вот SM не даст соврать.
—
Доктор Ливси
(26.12.2006 16:11:55
89.184.223.10
,
пустое
)
Ну а птица Говорун, как известно, стоит целого зоопарка... :0)
—
Доктор Ливси
(26.12.2006 16:13:47
89.184.223.10
,
пустое
)
С java попутал?
—
Oval
(26.12.2006 05:52:50
217.118.91.1
,
пустое
)
В общем, доктор, сегодня Вам 2 (два, низачот) за знание С/C++.
—
SМ
(26.12.2006 01:30:56
213.141.159.26
,
пустое
)
Ответ: Ваш пример для Си или для Си-плюс-плюса? Что за компилятор? Какой фирмы?Что За процессор
—
ТуамОсес
(26.12.2006 01:43:14
82.204.230.220
,
пустое
)
Ответ (+)
—
SМ
(26.12.2006 01:49:10
213.141.159.26
, 297 байт)
Ответ: Завтра я приведу свои доводы - надеюсь смогу убедить Вас в обратном...А пока баиньки...Поздно уже..Спокойной ночи
—
ТуамОсес
(26.12.2006 01:51:6
82.204.230.220
,
пустое
)
Давайте так - сначала найдите хоть один компилятор, кроме Вашего собственного, который отойдя от стандарта прислушается к Вашим доводам, а потом поговорим дальше.
—
SМ
(26.12.2006 01:53:1
213.141.159.26
,
пустое
)
И не забудьте на ночь почитать Стандарт. п. 8.3.4, абзацы 4, 7, 8. Особенно 7. Он именно про суть вопроса.
—
SМ
(26.12.2006 02:03:3
213.141.159.26
,
пустое
)
Да, компилячил как C++. Можно скомпилить как C, но от этого опять же ничего не изменится.
—
SМ
(26.12.2006 01:49:58
213.141.159.26
,
пустое
)
Док, еслимяти потребует запутался - упрощай... Скока потребуется для храния массива [1] [1][1]?.. А [1] of [1][1]?.. А [1] of [1] of [1]?..
—
ETM
(26.12.2006 00:58:48
62.117.85.87
,
пустое
)
А еще иногда полезно отключать в компиляторе параметр настройки "Alignment"...
—
ETM
(26.12.2006 01:03:54
62.117.85.87
,
пустое
)
Ответ: Память под собссно массив + память под 2 указателя
—
ТуамОсес
(26.12.2006 01:03:46
212.248.122.75
,
пустое
)
ЗАЧЕМ? Я же Вам привел пример, откомпилировал, время потратил. А Вы опять за свое. В процессе вычисления использовался всего один регистр, и то, там был только индекс. А для хранения массива потребовалось ровно столько, на сколько он объявлен.
—
SМ
(26.12.2006 01:18:2
213.141.159.26
,
пустое
)
Тогда поправь свою формулу счастья... (+)
—
ETM
(26.12.2006 01:10:13
62.117.85.87
, 144 байт)
Надо смотреть ширше, Доктор(+)
—
=L.A.=
(26.12.2006 00:15:12
213.134.214.10
, 85 байт,
ссылка
)
Это Ваш собственный компилятор так будет работать? В нормальных компиляторах памяти резервируется ровно столько, сколько надо, и никакой служебной информации.
—
SМ
(26.12.2006 00:03:40
213.141.159.26
,
пустое
)
Ответ: Да??? Да что Вы говорите...А обращение в С++ к элементу массива через указателя Вам известно??? Например *(*(A+i)+j)....Не знали такой конструкции в С+++?
—
ТуамОсес
(26.12.2006 00:10:13
212.248.122.75
,
пустое
)
Поясняю: *(*(A+i)+j)=10....это тоже самое, что и A[i][j]=10
—
ТуамОсес
(26.12.2006 00:11:37
212.248.122.75
,
пустое
)
а сам индекс не является указателем? А?
—
=L.A.=
(26.12.2006 00:20:46
213.134.214.10
,
пустое
)
нет, не является. Индексом может быть любая целочисленная переменная или константа, но не указатель.
—
SМ
(26.12.2006 00:31:6
213.141.159.26
,
пустое
)
а указатель не есть целочисленная переменная?
—
=L.A.=
(26.12.2006 00:40:40
213.134.214.10
,
пустое
)
Ответ: Да, мля......Очень тяжёлый случай.....Если так рассуждать - любой программный объект в внутрненнем представлении можно рассматривать как целое число
—
ТуамОсес
(26.12.2006 00:45:13
212.248.122.75
,
пустое
)
Нет, правила арифметики у указателя и у целочисленной переменной совсем разные.
—
SМ
(26.12.2006 00:42:58
213.141.159.26
,
пустое
)
общение с Доктором пагубно влияет на психику. Правила арифметики одинаковые всегда и везде.
—
=L.A.=
(26.12.2006 00:44:34
213.134.214.10
,
пустое
)
Тогда попробуйте указатель умножить или разделить на что нибудь. И внимательно прочитайте все, что о Вас расскажет Вам компилятор. :)
—
SМ
(26.12.2006 00:46:9
213.141.159.26
,
пустое
)
Ответ: Слово "перегрузка" конечно же не знакомо Господину "L.A."...Ему и в голову не может прийти, что знаком "+", можно обозначить совершенно разные операции - если захотеть, можно даже с помощью плюса обозначать вычитание
—
ТуамОсес
(26.12.2006 00:51:3
212.248.122.75
,
пустое
)
Я имел в виду стандартное поведение операторов. С перегрузкой, естесвенно, можно что угодно наворотить.
—
SМ
(26.12.2006 00:53:53
213.141.159.26
,
пустое
)
Ответ: Дык это тоже перегрузка ....Только стандартная, то бишь зарезервированная в языке...Так же как перегружена операция "+" в выражении A+B..Будут отрабатываться разные участки кода, в зависимости от того к какому типу принадлежат A и B {float, int и т.д}
—
ТуамОсес
(26.12.2006 00:58:7
212.248.122.75
,
пустое
)
Какая разница, как это назвать. Я имею в виду поведение операторов, описанное в стандарте. Скажем так, в обычном С, без ++.
—
SМ
(26.12.2006 00:59:52
213.141.159.26
,
пустое
)
Ответ: ISO то может и не содержит, но по смыслу, как назвать, что для выисления выражения A + B , для типа int будет вызвана одна функция, а для типа float - другая...Как это назвать?
—
ТуамОсес
(26.12.2006 01:06:46
212.248.122.75
,
пустое
)
В стандарте они называются "predefined operators". Значит так и назвать - предопределенные операторы.
—
SМ
(26.12.2006 01:14:52
213.141.159.26
,
пустое
)
Более того, как только оператор становится перегруженным, он теряет свойства предопределенного (для арифм. операторов), такие как ассоциативность и коммутативность. Т.е. для перегруженного оптимизатор уже не может заменить "a+b" на "b+a". Когда для предопределенного ему это разрешено (п. 1.9.15)
—
SМ
(26.12.2006 01:43:9
213.141.159.26
,
пустое
)
И, кстати, ISO/IEC 14882:1998 не содержит понятия "стандартная перегрузка операторов", так что Ваше высказывание некорректно.
—
SМ
(26.12.2006 01:02:6
213.141.159.26
,
пустое
)
Ответ: Вотименна...А то ещё над Доктором смёцца, а сам элементарных вещей не знает
—
ТуамОсес
(26.12.2006 00:38:19
212.248.122.75
,
пустое
)
Ответ: Индекс не это просто целое цисло, к указателям он никакого отношения не имеет...Конечно, можно считать его указателем...Но только в очень широком значении этого слова..А мы тут говорим про вполне конкретный термин С++
—
ТуамОсес
(26.12.2006 00:26:41
212.248.122.75
,
пустое
)
И что дальше? Вам привести листинги от пары разных компилеров, чтобы Вы наглядно убедились, что для арифметики указателей, будь то через оператор "+", будь то через оператор [], никаких лишних данных в памяти хранить не надо?
—
SМ
(26.12.2006 00:13:36
213.141.159.26
,
пустое
)
Щас отвечу...Подождите...Получше сформулирую...Или Вы уже поняли свою ошибку?
—
ТуамОсес
(26.12.2006 00:16:18
212.248.122.75
,
пустое
)
Нет, это Вы не поняли свою. Точнее не читали стандарт ANSI/ISO
—
SМ
(26.12.2006 00:17:11
213.141.159.26
,
пустое
)
Ответ: Во-первых, насчёт того, что никакая дополнит. инфа не хранится.. А как по-Вашему компилер определяет в выражении *(A+i) сколько реально ему нужно прибавить к внутреннему представлению уазателя? Ведь длина массива и размер его элемента могут быть произвольными??? Это раз
—
ТуамОсес
(26.12.2006 00:23:9
212.248.122.75
,
пустое
)
Опять низачот. При объявлении многомерного массива все размерности, кроме последней, обязательно указываются. Оттуда компилер и знает, сколько и когда прибавлять.
—
SМ
(26.12.2006 00:29:49
213.141.159.26
,
пустое
)
Ответ: Спицально тупите? А в выражениях {пример которого я привёл}, которых в проге может быть туева хуча, компилятор тоже не использует служебную инфу при операциях с указателями {шоб определить, скока и куда надо прибавлять}???
—
ТуамОсес
(26.12.2006 00:33:46
212.248.122.75
,
пустое
)
Нет, не использует. Советую думать, прежде чем что-то писать (+)
—
SМ
(26.12.2006 00:41:35
213.141.159.26
, 1270 байт)
Ответ: А про динамические массивы слыхали?....Почитайте тело мессаджа...
—
ТуамОсес
(26.12.2006 12:42:53
82.204.230.152
, 398 байт)
Ой. int (pointer *)[10]; pointer=new int[5][10]...
—
-=ВН=-
(26.12.2006 14:12:49
193.125.71.140
,
пустое
)
Слыхали, но это принципиально другой вопрос. Вы сами создали такую структуру, как хотели, и никто Вас в этом не ограничивает, можете наворотить еще хитрее и сложнее. И это отнюдь не "особенности внутреннего представления многомерных массивов в C++, например, для хранения массива A[5][6][4] ". Явно заданный тип по этому примеру "A[5][6][4]" с указанием размерностей НИКОГДА не будет так представлен.
—
SM
(26.12.2006 13:06:2
85.21.237.237
,
пустое
)
Ответ: Глюкануло что-то при передаче мессаджа и листинг покоцался...Попробую ещё раз...
—
ТуамОсес
(26.12.2006 12:49:18
82.204.230.125
, 359 байт)
Ответ: Модер!!! Чё за куйня???...Оператор <i..+..+> и всё что за ним до скобки вырезаеццо {с точками спицально написал шоб не вырезался}....А?
—
ТуамОсес
(26.12.2006 12:53:45
82.204.230.210
,
пустое
)
Модер тут не причем. Чтобы постить С-исходники в интернет, надо еще немного знакомым с HTML быть.
—
SM
(26.12.2006 13:54:21
85.21.237.237
,
пустое
)
P.S. Про теневые поля, переменные и операции, надеюсь, Вы к курсе
—
ТуамОсес
(26.12.2006 00:24:0
212.248.122.75
,
пустое
)
Доктор не читает, Доктор пишет.
—
=L.A.=
(26.12.2006 00:21:21
213.134.214.10
,
пустое
)
Вот это точно подмечено :) :)
—
SМ
(26.12.2006 00:43:53
213.141.159.26
,
пустое
)
;)))))))))
—
Electrovoicer
(26.12.2006 00:22:36
81.201.28.3
,
пустое
)
Отправка ответа
Имя*:
Пароль:
E-mail:
Тема*:
Сообщение:
Ссылка на URL:
URL изображения:
если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
увеличьте 2 вдвое:
Перейти к списку ответов
|
Конференция
|
Раздел "Электроника"
|
Главная страница
|
Карта сайта
Web
telesys.ru