Отпечатък от паметта на данните и структурата на данните

Някой има ли представа дали има функция, която връща размера на някаква структура от данни, sys.getsizeof в python е пример, в racket?


person cobie    schedule 20.05.2013    source източник


Отговори (1)


Няма вградена такава функционалност. Възможно е да се напише такава функция с помощта на функционалността на FFI, но човек трябва да знае доста за вътрешността на Racket.

Има ли конкретна структура от данни, която ви интересува? Може би е възможно да се изчисли размерът като се има предвид броя на елементите в него, без да се използва обща функция.

person soegaard    schedule 20.05.2013
comment
работя с битови вектори и се опитвам да разбера приблизително колко памет ще заеме 1000000000 битов вектор - person cobie; 20.05.2013
comment
Имате късмет! (Написах първоначалната версия на кода на битов вектор.) Както и да е, един битов вектор пакетира 8 бита в байт. Байтовете се съхраняват в байтов низ. Байтовият низ от своя страна се съхранява в структура, която също съдържа число, представляващо броя на битовете в битовия вектор. Накратко: n бита използва n/8 байта плюс няколко думи за счетоводство. - person soegaard; 20.05.2013
comment
Освен това трябва да попитам защо използването на нормални вектори изглежда по-бързо от използването на битови вектори? Използвах нормални вектори в ситото на Ератостен, за да генерирам прости числа до 100 000 000 и беше много по-бързо (до 5 пъти по-бързо), отколкото когато използвах битови вектори. Има ли нещо, което пропускам? - person cobie; 20.05.2013
comment
Булевите стойности са представени като непосредствени. Тоест, те са представени като една дума (32 или 64 бита в зависимост от машината). Вектор на каквото и да било се представя в паметта като число (броя на елементите във вектора), последвано от елементите във вектора. Ако a е адресът на вектора, може да се получи булевото просто като (в C нотация) a[1+n] или *(a+1+n). Това е (vector-ref v n) се свежда до проста препратка към паметта (пренебрегвам проверката за грешки). От друга страна бит-векторът се нуждае от 1 препратка към паметта, за да търси байтовия низ. - person soegaard; 21.05.2013
comment
Изчисление от n до индекса на байта, съдържащ бит n. Препратка към паметта за извличане на байта. Малко изчисление за получаване на отделния бит (като число). И накрая преобразувайте бита (като число) в булева стойност. - person soegaard; 21.05.2013
comment

Опитвате се да напаснете точки към модела: y = sin(ax + b). Тъй като използвате линейна регресия, имате нужда от линеен модел. Така че един начин да направите това е да изчислите arcsin за всяка точка и сега да изчислите линейната регресия. Сега моделът е: arcsin(y) = ax + b. Регресионният модел ви дава a и b, което е това, което търсите. Трябва да можете да тествате това доста бързо в Excel, след което да го кодирате, след като нюансите са разбрани.

- person soegaard; 21.05.2013