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 все же.
Рекомендация из предыдущего вопроса по этому поводу заключалась в использовании 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
Я с радостью использовал 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
Очевидно, здесь есть некоторое приближение, но я нашел его очень полезным для анализа следа и тюнинг.