2015-07-22 2 views
2

Простой вопрос: есть ли способ узнать, сколько памяти занимает конкретная структура?Как узнать, сколько памяти занимает структура?

В идеале, я бы хотел напечатать его на консоли.


Edit: Крумелер пришел с простым решением с использованием sizeof функции.

К сожалению, это не работает с массивами. После кода

println("Size of int \(123) is: \(sizeofValue(123))") 
println("Size of array \([0]) is: \(sizeofValue([0]))") 
println("Size of array \([0, 1, 8, 20]) is: \(sizeofValue([0, 1, 8, 20]))") 

Производит этот вывод:

Size of int 123 is: 8 
Size of array [0] is: 8 
Size of array [0, 1, 8, 20] is: 8 

Такие разные размеры массивов дают одинаковый размер, что, безусловно, неверно (по крайней мере, для моей цели).

+1

sizeof (MyStruct) может быть? – Krumelur

+0

@ Krumelur Выглядит хорошо ... почему бы вам не ответить? – drasto

+0

Слишком мало символов, я должен был быть творческим :) – Krumelur

ответ

2

Оператор sizeof(T) доступен в Swift. Он возвращает размер, занимаемый указанным типом или переменной, как и в C.

В отличие от C, однако нет концепции выделенного стеком массива (статический массив). Массив - это указатель на объект, что означает, что его размер всегда будет размером указателя (это то же самое, что и для массивов, выделенных кучей в C). Чтобы получить размер массива, вы должны сделать что-то вроде

array.count * sizeof(Telement) 

но даже это только справедливо, если Telement не является объектом, который выделяет память кучи.

+0

Спасибо. См. Мое редактирование. – drasto

+0

Для массива: http://stackoverflow.com/a/25714152/1630618 – vacawama

+0

Хорошо, я понял - я просто использую 'sizeof' для типа, являющегося типом элемента массива, умножающегося на количество элементов в массиве и эта сумма получается для всех массивов. – drasto

Смежные вопросы