Показать сообщение отдельно
Старый 31.01.2017, 17:28
Nooob вне форума Посмотреть профиль Отправить личное сообщение для Nooob Найти все сообщения от Nooob
  № 14  
Ответить с цитированием
Nooob
 
Аватар для Nooob

Регистрация: Mar 2007
Сообщений: 319
Под хранением на стеке, я имею ввиду то что вне зависимости от того сколько раз был вызван конструктор у простого типа, память в куче под него не выделяется, так как она уже была выделена на стеке и в константном пуле
Код AS3:
			var classes:Vector.<Class> = new <Class>[Array, Object, Dictionary, int, uint, Number, String, Boolean];
			for each (var cls:Class in classes) 
			{
				var memory:int = System.totalMemory;
				for(var i:int = 0; i < 100000; i++)
				{
					var j:Object = new cls();
				}
				trace(cls, System.totalMemory - memory);
				System.gc();
			}
/*
[class Array] 151552
[class Object] 12288
[class Dictionary] 548864
[class int] 0
[class uint] 0
[class Number] 0
[class String] 0
[class Boolean] 0
значения не показательные, лучше смотреть в Scout
*/
это можно понять по спецификации AVM2

Добавлено через 5 часов 26 минут
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Во многих других языках примитивы "настоящие", не унаследованы от Object. Поэтому назвать их полноценными примитивами здесь, никак нельзя.
С полноценными примитивами, такая конструкция не прокатит без обертки
Во многих других языках так же есть возможность boxing/unboxing примитивных типов в базовый тип и складывается впечатление что все примитивные типы наследники Object.

C#
Код:
void doSomething(Object obj)
{
        int resultVar = (int)obj;
}
int someVar = 1;
print(someVar is Object); //True
doSomething(someVar);
Тоже самое что кажется что int наследник Number,
Код AS3:
var a:int = 1;
trace (a is Number); //true
хотя наследником он быть не может


Последний раз редактировалось Nooob; 31.01.2017 в 23:51.