Размер в оперативной памяти структуры Python

struct abort
{
    int x;
};

int main()
{
    abort();
    return 0;
}

Возвраты с кодом выхода 0 в C++, или 3 в C.

Этот прием мог, вероятно, использоваться, чтобы сделать что-то более интересное, но я не мог думать о хорошем способе создать конструктора, который будет приемлем к C. Я пытался делать столь же скучный пример с конструктором копии, который позволит аргументу быть переданным, хотя довольно непортативным способом:

struct exit
{
    int x;
};

int main()
{
    struct exit code;
    code.x=1;

    exit(code);

    return 0;
}

VC ++ 2005 отказался компилировать это в режиме C++, тем не менее, жалуясь на то, как "код выхода" был переопределен. (Я думаю, что это - ошибка компилятора, если я внезапно не забыл, как программировать.) Это вышло с кодом выхода процесса 1 при компиляции как C все же.

110
задан Michael Currie 7 June 2015 в 03:15
поделиться

2 ответа

Рекомендация из предыдущего вопроса по этому поводу заключалась в использовании sys.getsizeof () , цитируя:

>>> import sys
>>> x = 2
>>> sys.getsizeof(x)
14
>>> sys.getsizeof(sys.getsizeof)
32
>>> sys.getsizeof('this')
38
>>> sys.getsizeof('this also')
48

Вы можете использовать следующий подход:

>>> import sys
>>> import decimal
>>> 
>>> d = {
...     "int": 0,
...     "float": 0.0,
...     "dict": dict(),
...     "set": set(),
...     "tuple": tuple(),
...     "list": list(),
...     "str": "a",
...     "unicode": u"a",
...     "decimal": decimal.Decimal(0),
...     "object": object(),
... }
>>> for k, v in sorted(d.iteritems()):
...     print k, sys.getsizeof(v)
...
decimal 40
dict 140
float 16
int 12
list 36
object 8
set 116
str 25
tuple 28
unicode 28

30.09.2012

python 2.7 (Linux, 32-разрядная версия):

decimal 36
dict 136
float 16
int 12
list 32
object 8
set 112
str 22
tuple 24
unicode 32

python 3.3 (Linux, 32-разрядная версия)

decimal 52
dict 144
float 16
int 14
list 32
object 8
set 112
str 26
tuple 24
unicode 26

2016-08-01

OSX, Python 2.7.10 (по умолчанию, 23 октября 2015 г., 19:19:21) [GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] на darwin

decimal 80
dict 280
float 24
int 24
list 72
object 16
set 232
str 38
tuple 56
unicode 52
138
ответ дан 24 November 2019 в 03:14
поделиться

Я с радостью использовал pympler для таких задач. Он совместим со многими версиями Python - модуль asizeof , в частности, восходит к версии 2.2!

Например, используя пример hughdbrown, но с из pympler import asizeof в начале и напечатайте asizeof.asizeof (v) в конце, я вижу (система Python 2.5 в MacOSX 10.5):

$ python pymp.py 
set 120
unicode 32
tuple 32
int 16
decimal 152
float 16
list 40
object 0
dict 144
str 32

Очевидно, здесь есть некоторое приближение, но я нашел его очень полезным для анализа следа и тюнинг.

35
ответ дан 24 November 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: