|
Vyacheslav
|
|
В чём разница между двумя объявлениями массива?11.08.2011, 04:05. Показов 1460. Ответов 6
Метки нет (Все метки)
Вопрос новичка,но тем не менее,скажите пожалуйста,буду очень признателен.
В чем разница между этими двумя объявлениями управляемого массива,компиллятор воспринимает оба варианта: 1) double Matrix_2D[,]; ... Matrix_2D = new double __gc[V_col,V_row]; ... 2) Double Matrix_2D[,]; ... Matrix_2D = __gc new Double[V_col,V_row]; ... ? Я так думаю - может дело в приведении типов?? |
|
| 11.08.2011, 04:05 | |
|
Ответы с готовыми решениями:
6
В чем разница между двумя объявлениями класса В чем разница объявлениями функций? |
|
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
|
|
| 11.08.2011, 10:50 | |
|
Я думаю что никакой. Компилятор в обоих случаях использует тип System.Double. Доказательством является то что конструкция
Console::WriteLine(__box(Matrix_2D[0,0])->GetType()->ToString()); в обоих случаях выводит System.Double.
0
|
|
|
Vyacheslav
|
|
| 11.08.2011, 21:41 | |
|
Но в этом случае получается,что компиллятор проводит упаковку double в Double,что и показывает ToString.К тому же,насколько я понял,в управляемой динамической памяти может находится только объект на который указывает управляемый указатель (тип Double).А с массивом:необходим управляемый указатель на массив управляемых объектов? Т.е. получается управляемый указатель на массив необходим для уничтожения класса Array сборщиком мусора,а указатели на управляемые элементы массива уже для их поэлементного удаления сборщиком?
|
|
|
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
|
|
| 14.08.2011, 14:36 | |
|
Для начала надо знать что в .NET Framework типы делятся на две категории - ссылочные (reference types) и интегральные типы (value types). Ссылочные типы хранят ссылку на объект в управляемой куче, а интегральные типы хранят свои данные в себе и могут размещаться в стеке или встраиваться (inline) в другие структуры данных. Массивы всегда хранятся в управляемой куче с отличиями для сссылочных и интегральных типов. Массив ссылочных типов состоит из отдельных ссылок, а массив интегральных типов содержит непосредственно данные этих типов.
Следующее важное понятие это упаковка/распаковка (boxing/unboxing). С интегральным типом на этапе выполнения не связано никакой информации о его типе и чтобы вызывать какой-то метод класса Object или интерфейса реализовыванного этим типом надо выполнять упаковку т.е. создать в управляемой куче копию переменной - кстати это довольно дорогая операция в .NET 1.x - чтобы среда исполнения смогла произвести вызов метода-члена для данной переменной как для ссылочного типа. Вооруженные этими знаниями начинаем разбор твоих вопросов ![]() > Но в этом случае получается,что компиллятор проводит > упаковку double в Double,что и показывает ToString. Не компилятор, а программист. Компиляторы VB.NET и С# скрывают такие подробности от программиста, а в C++ with Managed Extensions (далее C++/wME) программист должен сам явно указывать необходимые ему действия. > К тому же,насколько я понял,в управляемой динамической памяти > может находится только объект на который указывает > управляемый указатель (тип Double). В C++/wME есть (условно!) две области памяти - управляемая и неуправляемая. Ты как программист должен решать какая тебе нужна. Насчет типа я не понял. Ты думашь что тип указателя в самом деле double? Скорее уж это usigned int или long. > Т.е. получается управляемый указатель на массив необходим для > уничтожения класса Array сборщиком мусора,а указатели на > правляемые элементы массива уже для их поэлементного > удаления сборщиком? Указатель нужен для отслеживания сборщиком жив ли объект - т.е. есть ли него ссылки. Если ссылок нет, объект удаляется из кучи, куча сжимается, управдяемые ссылки в программе обновляются на новые адреса. На подробное объяснение принципов работы сборщика мусора у меня сил нет. Это очень большая тема. Советую купить книгу Джефри Рихтера 'Программирование на платформе Microsoft .NET Framework' где хорошо описано внутренее устройство .NET Framework.
0
|
|
|
Vyacheslav
|
|
| 14.08.2011, 23:39 | |
|
Спасибо большое за столь исчерпывающий ответ,очень признателен.
И ещё,если не трудно,Вы сказали,что : 'Массивы всегда хранятся в управляемой куче с отличиями для сссылочных и интегральных типов. Массив ссылочных типов состоит из отдельных ссылок, а массив интегральных типов содержит непосредственно данные этих типов'. Это касается управляемых массивов( __gc ), а ссылочные - Double,интегральные - double? Matrix_2D = new double __gc[V_col,V_row]; Ну и насчет указателя - почему :'Скорее уж это usigned int или long'. Спасибо ещё раз и не судите строго. |
|
|
86 / 62 / 69
Регистрация: 15.03.2007
Сообщений: 6,903
|
|
| 15.08.2011, 10:27 | |
|
> а ссылочные - Double, интегральные - double?
Ну нет же! Я выше ответил - double и Double (в данном случае!) это один о тот же тип - System.Double. Он является интегральным. Ты видимо путаешь типы C++ и .NET Framework. > Matrix_2D = new double __gc[V_col,V_row]; > Ну и насчет указателя - почему :'Скорее уж это usigned > int или long'. Потому что на платформе Intel указатели сейчас имеют такие типы. Ты выделяещь не массив указателей типа double, а массив значений типа double. В переменную Matrix_2D будет записан указатель на этот массив. Но это не значит у него будет тип double. Какой он будет иметь тип тебя не должно волновать - это детали реализации.
0
|
|
|
Vyacheslav
|
|
| 15.08.2011, 21:42 | |
|
Спасибо за исчерпывающие ответы.Книгу обязательно куплю,ни в одной ещё не нашел полных ответов на многие вопросы,такие как упаковка/распаковка,зачем конкретно,типы(ссылочные/интегральные) и т.п. Казалось бы не столь значимые вопросы,но в них скрывается определение самой, можно так сказать философии .NET Framework.Никак не могу четко построить для себя представление,что это такое.
С уважением Вячеслав. |
|
| 15.08.2011, 21:42 | |
|
Помогаю со студенческими работами здесь
7
В чем разница между двумя mnemonic? Разница между объявлениями указателя Разница между объявлениями указателей В чем разница между этими двумя HDD? В чем разница между одним и двумя слэшами Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
|