SpiralMatrix memory usage - difference between String[,] and char[,]
Привет,
Version I: http://pastebin.com/uCGg9qpM
Version II: http://pastebin.com/0P6qnnc2
Двете версии на кода по-горе, са почти идентични, като разликата е основно в това, че в първия вариант ползвам String[,] , а във втория char[,]. И двете версии работят правилно, но проблема е, че версията, която ползва String за двумерния масив, използва доста повече памет, от версията, която ползва char. Първата версия, ползва 26MB памет, при подадени параметри 666 devil, а втората версия - 9MB.
Въпроса ми е, от къде идва разликата? Реално String е масив от char елементи и при положение, че всеки елемент, който записвам и при двата случая се състои от максимум една буква, използваното място би трябвало да е еднакво и при двата case-a. Евентуално, ако C# ползва някакъв ArrayList за string обекта, с цел да намали броя на преоразмерявания, при добавяне на нови елементи?
Не и когато N = 1
Short и Long също може да приемат една и съща стойност, но се заделя повече памет. Би трябвало концепцията да е същата като при променливите...все пак в едното се очаква да се въведе нещо повече от 1 символ, който ти е 4 байта да речем, а няколко по 4 ...
Едит: Може и да греша, но ми звучи логично.
По-скоро не е това, понеже при short и long, реално имаш ограничение на броя байтове, които всеки от двата типа може да съдържа. При String обаче не е така. Там имаш ограничение, че един string не може да е по-голям от определено количество памет, което е някъде към 2ГБ. В смисъл, в C String-a буквално се дефинира като char[], за това интуитивната логика е, че String str = "a" & char[] str = new char[]{'a'}, ще са с еднаква големина от към памет.