Pythonで1バイトまたは2バイト(たとえば2または4)バイトの情報を割り当て/格納するにはどうすればよいですか?Pythonでシングルバイトのメモリを保存する方法は?
私はmalloc/newの代わりにPythonを探していませんが、膨大な量のメモリを取らないデータ型もあります。
私は以下を試しましたが、以下に示すように、すべてが大量のメモリを使用しています。
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> i = 1 ; sys.getsizeof(i)
24
>>> i = None ; sys.getsizeof(i)
16
>>> i = 'c' ; sys.getsizeof(i)
38
>>> i = 'good' ; sys.getsizeof(i)
41
>>> i = bytearray(0) ; sys.getsizeof(i)
48
>>> i = bytearray(1) ; sys.getsizeof(i)
50
>>> from struct import *
>>> i = pack('h', 1) ; sys.getsizeof(i)
39
>>> i = array('l', [1]) ; sys.getsizeof(i)
64L
私はPythonが大好きで、100,000件のファイアウォールルールを格納するアプリケーションを作成しています。 Pythonの従来のデータ型(整数、文字列)を使用すると、各ルールは約500バイトの情報になります。私はスペースを節約し、アプリケーションの残りの部分がPython(2.7)にあるので、C/C++への切り替えを避けたいと思います。
また、私のアプリケーションはほぼ2分ごとにルールの更新や変更をチェックするため、メモリを保持することはできません。
私の考えは、情報を圧縮してメモリを節約することです。たとえば、ルールの 'direction'を文字列または整数に 'input'または 'output'または 'inout'として格納する代わりに、特定の方向をマークするために2または3ビットを割り当てます。これで私のルール情報を10バイト以下に保存できると仮定しています。このために、2/4バイトの情報しか格納しない方法を知りたい。
フィードバック/提案/参考情報をお待ちしています。
正しい問題に取り組んでいることを確認するだけで、100kルールが同時にメモリに保存されるようにアプリケーションを作成していますか? – Brian
それぞれを500バイトずつ保存しても、500 * 100000/1024^2 MB(47.7MB)に過ぎません。場合によっては、Google Chromeのタブで100MB以上を使用します。 – Aurora0001
@Brian後ほどお話したように、2分ごとにルールの変更を確認する必要があるため、メモリを維持しないようにしたいと考えています。だから私は他のアドバイスされた方法がない限り、情報をメモリに保持しなければならないと思います。 – ViFI