Конференция ".Net" » Массивы хранятся в Стэке или в Хипе ?
 
  • Андрей из Иркутска (21.06.07 05:20) [0]
    Здравствуйте,

    Существуют ли какие-нибудь доствоерные (или на уровне поверий) сведения о том, где хранятся обычные делфийские массивы: в Стеке как раньше или в Хипе как в CLR?

    Ну или чуть другой вопрос: что "лежит" в основе делфийских массивов (во что они в итоге компилятся) в System.Array или борланд что-то свое придумал?

    Проверен факт, что когда передаешь массив в процедуру по значению (без указания 'var'), любые его изменения внутри процедуры "наружу не попадают".
    С одной стороны это явно говорит о том, что все хранится именно в Стэке как и раньше,
    но с другой, Борланд мог "исскуственно" создавать копию экзепляра ссылочного типа для обеспечения "совместимости" со старым кодом (который ожидает именно такой работы).

    Ну и на всякий случай повторюсь: мне критично знать именно в Стэке или в Хипе хранятся массивы (потому что у меня их очень много, а стэк не резиновый (или в CLR резиновый?))

    Спасибо.
  • exactly (21.06.07 10:36) [1]
    массив если чё это ссылочный тип....
  • clickmaker © (21.06.07 12:56) [2]
    Array types are reference types derived from the abstract base type Array (c) MSDN

    Для облегчения перехода с не-дотнетовских языков, С++ или VB, к примеру, в C# и VB.NET ввели языковые конструкции
    string[] sa = {"zero", "one", "two", "three", "four"};
    или
    Dim sa() as String = {"zero", "one", "two", "three", "four"}

    но на самом деле, массив будет наследоваться от System.Array и жить в куче, а в стеке - только ссылка на него
  • Андрей из Иркутска (25.06.07 02:59) [3]
    > массив если чё это ссылочный тип....

    Да ты чо?! :)

    > Для облегчения перехода ... в C# и VB.NET ввели

    Если бы массивы в Делпхи(ДотНет) при передаче параметром вели себя так же, как и в C# и VB.NET, я бы не дёргался.

    По делу: минимальное изучение вопроса показало, что, очевидно, для совместимости со старым кодом при передаче ссылки на экземпляр массива параметром "по значению" (без var|out) создается копия этого экземляра.
  • exactly (25.06.07 14:43) [4]
    Андрей из Иркутска   (25.06.07 02:59) [3]

    > По делу: минимальное изучение вопроса показало, что, очевидно,
    >  для совместимости со старым кодом при передаче ссылки на
    > экземпляр массива параметром "по значению" (без var|out)
    > создается копия этого экземляра.

    мне кажется, твоё "очевидно" далеко от истины  как москва от гондураса
  • KilkennyCat © (25.06.07 20:06) [5]
    а зачем совместимость со старым кодом???
  • Андрей из Иркутска (26.06.07 04:21) [6]
    > мне кажется, твоё "очевидно" далеко от истины  как москва от гондураса

    "очевидно" это было про мотивы Борланда сделать так.

    Проверить внутри процедуры, один это экземпляр или нет, думаю, даже Вы сможете.

    > а зачем совместимость со старым кодом???
    :)
    А зачем Борланд нагородил VCL.NET ? :)
    Думаешь, только для тех, кому Windows.Forms учить лень? :)
  • KilkennyCat © (26.06.07 18:57) [7]

    > Андрей из Иркутска   (26.06.07 04:21) [6]


    Конечно же нет. Именно для совместимости. Ага. Ща быстренько совместю все проекты под дотНет... Еще бы на джаву перенести. Ну и на макинтош заодно...
  • sdts (26.06.07 20:23) [8]

    > А зачем Борланд нагородил VCL.NET ?

    а действительно, зачем?
  • Андрей из Иркутска (27.06.07 03:12) [9]
    > Конечно же нет. Именно для совместимости.
    > Ага. Ща быстренько совместю все проекты под дотНет...

    >> А зачем Борланд нагородил VCL.NET ?

    > а действительно, зачем?

    Если есть возможность каждый раз начинать жизнь с чистого листа, я Вам завидую.
    Но тут это уже явно ффтопку, тфу, т.е. офффтопик.
  • KilkennyCat © (27.06.07 19:14) [10]
    А, пущай оффтоп, этот форум все равно не очень живой пока.

    Я так понимаю, что технология .Net - это совершенно другая технология, и говорить о совместимости со старым кодом так же нелепо, как о совместимости программ Win32 с *nix или MacOC.

    А Vcl.Net и VCL.win32 - это всего лишь средства разработки. совпадение в наименовании вовсе не означает совместимость с кодом. Совместимость в э... как это назвать-то... эргономике? разработки ПО - да.
  • Андрей из Иркутска (28.06.07 03:23) [11]
    > совпадение в наименовании вовсе не означает совместимость с кодом.

    Да как раз означают.
    То, что раньше в паскале array [] of или TObject  им и остается в том смысле, что ведет себя точно так же.

    Борланд сделала все что могла и даже чуть больше, что б старые проекты на уроне исходного кода были совместимы с новой Делпхи.

    На практике это означает, например, возможность плавно переползти на .net совсем.
    Например по след. сценарию:
    1. Перетаскиваем весь проект на Delphi.net
    2. Новые части пишем на C#/VB.net и в виде сборок подключаем к проекту
    3. "Основную" часть проекта переписываем на C# (при этом часть проекта, которую, например, редизайнить/рефакторить смысла нет, так и остается на паскале).
  • sdts (28.06.07 12:48) [12]
    а вт интересно, вот такому определению
    http://ru.wikipedia.org/wiki/Microsoft_.NET
    Vcl.Net соответствует? не имел дело с Vcl.Net, но инетересно ...
  • sdts (28.06.07 12:51) [13]

    > Например по след. сценарию:

    а смысл такого действа, почему не продолжать в D7 (ну или в каком все было)?
  • Андрей из Иркутска (29.06.07 03:13) [14]
    > а смысл такого действа, почему не продолжать в D7

    Например:
    - Что б не отставать от жизни команде (держать в актуале скилы)
    - Получить полезные штуки вроде ADO.Net и Ремоутинга

    Но это исключительно Например. У каждого могут быть свои мотивы (в т.ч. на грани политики), равно как их не может быть вовсе.

    > а вт интересно, вот такому определению

    Там очень длинное определение :)

    Если ты о том, генерит ли Delphi нормальный IL-код -- вроде да.
    Является ли VCL.net "кросс-платформенной" -- нет естественно.
  • KilkennyCat © (29.06.07 03:34) [15]

    > Является ли VCL.net "кросс-платформенной" -- нет естественно.


    Это почему это? Использование Vcl.Net требует что-то еще, помимо .Net???
  • KilkennyCat © (29.06.07 03:41) [16]
    тем более, это противоречит
    > генерит ли Delphi нормальный IL-код -- вроде да.
  • KilkennyCat © (29.06.07 03:48) [17]
    Работа на нескольких платформах. При компиляции кода для .NET Framework
    компилятор генерирует код на общем промежуточном языке (common
    intermediate language, CIL), а не традиционный код, состоящий из процессор-
    ных команд. При исполнении CLR транслирует CIL в команды процессора.
    Поскольку трансляция выполняется в период выполнения, генерируются команды конкретного процессора. Это значит, что вы можете развертывать ваше приложение для .NET Framework на любой машине, где работает версия CLR и FCL, соответствующая стандарту ЕСМА: с архитектурой x86, IA64, Alpha, PowerPC
    и т. д.



    Рихтер.
  • Андрей из Иркутска (29.06.07 10:48) [18]
    ну да, Джефри всё по делу пишет :)

    но ты загляни в исходники VCL.net и сразу поймёшь, почему она не кросс-платформенная :)
  • Sdubaruhnul (13.07.07 13:40) [19]
    >Это почему это? Использование Vcl.Net требует что-то еще, помимо .Net???

    .NET тоже не кросс-платформенная, что бы там Майкрософт ни говорил.
  • Shaman_ © (18.08.07 17:21) [20]
    А microsoft вроде про кросс-платформенность .NET и не говорил :)
 
Конференция ".Net" » Массивы хранятся в Стэке или в Хипе ?
Есть новые Нет новых   [118667   +48][b:0][p:0.002]