JP7140935B1 - リアルタイムアプリケーションのための決定的メモリ割り当て - Google Patents
リアルタイムアプリケーションのための決定的メモリ割り当て Download PDFInfo
- Publication number
- JP7140935B1 JP7140935B1 JP2022077352A JP2022077352A JP7140935B1 JP 7140935 B1 JP7140935 B1 JP 7140935B1 JP 2022077352 A JP2022077352 A JP 2022077352A JP 2022077352 A JP2022077352 A JP 2022077352A JP 7140935 B1 JP7140935 B1 JP 7140935B1
- Authority
- JP
- Japan
- Prior art keywords
- memory
- memory pool
- function
- allocation
- generating
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000006870 function Effects 0.000 claims abstract description 160
- 238000000034 method Methods 0.000 claims abstract description 47
- 238000011144 upstream manufacturing Methods 0.000 claims description 7
- 238000004891 communication Methods 0.000 description 29
- 230000003068 static effect Effects 0.000 description 25
- 238000005457 optimization Methods 0.000 description 16
- 230000008569 process Effects 0.000 description 15
- 239000002699 waste material Substances 0.000 description 10
- 239000013598 vector Substances 0.000 description 7
- 238000004590 computer program Methods 0.000 description 6
- 238000012545 processing Methods 0.000 description 5
- 230000005236 sound signal Effects 0.000 description 5
- 238000004458 analytical method Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 3
- 239000000284 extract Substances 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 239000000835 fiber Substances 0.000 description 2
- 238000013467 fragmentation Methods 0.000 description 2
- 238000006062 fragmentation reaction Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 235000015842 Hesperis Nutrition 0.000 description 1
- 235000012633 Iberis amara Nutrition 0.000 description 1
- 241000699670 Mus sp. Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 239000000872 buffer Substances 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000002772 conduction electron Substances 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000014509 gene expression Effects 0.000 description 1
- 238000002347 injection Methods 0.000 description 1
- 239000007924 injection Substances 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/443—Optimisation
- G06F8/4434—Reducing the memory space required by the program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/43—Checking; Contextual analysis
- G06F8/433—Dependency analysis; Data or control flow analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/06—Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1008—Correctness of operation, e.g. memory ordering
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System (AREA)
Abstract
Description
前記ビットコードをスキャンしながら、前記ビットコード内の前記ダミー関数への各呼び出しを検出するステップと、前記ダミー関数への各呼び出しに対して、前記ダミー関数への前記検出された呼び出しで使用された前記複数のパラメータを抽出し、かつ前記抽出された複数のパラメータから、前記メモリプールの前記識別子と前記データ型の前記サイズとを含む割り当てレコードを生成するステップと、前記生成された割り当てレコードから割り当てレコードリストを生成するステップと、前記割り当てレコードリストに基づいてヘッダファイルを生成するステップであって、前記ヘッダファイルは、1つ以上のバケットの定義と、1つ以上のメモリプールの各定義とを含み、前記1つ以上のメモリプールの各定義は、前記1つ以上のバケットのうちの少なくとも1つを特定する、前記割り当てレコードリストに基づいてヘッダファイルを生成するステップと、を含む。
前記ビットコードをスキャンするステップ前に、前記ソースコードを前記ビットコードにコンパイルするステップと、
前記ヘッダファイルを生成するステップ後、前記ヘッダファイルで前記ソースコードを再コンパイルするステップと、をさらに含むことができる。
図1は、本明細書に説明する様々な実施形態に関連して使用され得る例示的な有線または無線システム100を示すブロック図である。例えば、システム100は、本明細書に説明する(例えば、最適化ツールなどの1つ以上のソフトウェアモジュールを格納および/または実行するための)機能、プロセス、または方法の1つ以上として、またはそれらと関連して使用することができる。システム100は、サーバもしくは任意の従来のパーソナルコンピュータ、または有線もしくは無線データ通信が可能な任意の他のプロセッサ対応装置であり得る。当業者には明らかなように、他のコンピュータシステムおよび/またはアーキテクチャを使用することもできる。
ここから、決定的メモリ割り当てのためのプロセスの実施形態について詳細に説明する。説明するプロセスは、例えば、コンピュータプログラムまたはソフトウェアパッケージとして、1つ以上のハードウェアプロセッサ(例えば、プロセッサ110)によって実行される1つ以上のソフトウェアモジュールにおいて具現化することができることを理解するべきである。説明するプロセスは、ソースコード、オブジェクトコード、および/またはマシンコードで表される命令として実装することもできる。これらの命令は、ハードウェアプロセッサ110によって直接実行してもよいし、あるいは、オブジェクトコードとハードウェアプロセッサ110との間で動作する仮想マシンによって実行することもできる。
固定サイズのブロック割り当てでは、メモリ管理にはメモリプールが使用される。メモリプールは、同一ブロックサイズを持つ複数のメモリブロックをバケットにあらかじめ割り当てることで、動的なメモリ割り当てを可能にする。つまり、バケットはブロック数およびブロックサイズによって定義される。バケットのサイズは、ブロック数とブロックサイズとの積である。
C++などのプログラミング言語は、割り当ての実サイズを隠す高水準の抽象化機能を利用している。例えば、C++標準ライブラリ(std)は、マップ(std::map)、リスト(std::list)、セット(std::set)、プロミス(std::promise)、共有ポインタ(std::shared_ptr)などのコンテナを提供している。これらのコンテナは、メモリの確保と解放とのためにアロケータを利用する。つまり、アロケータは、所与のコンテナに対するメモリの割り当てと解放とのすべての要求を処理する。
次に、開示された実施形態で使用することができるメモリプールの実装例について説明する。開示された実施形態の理解に完全な説明は必要ないため、最小限の実装のみを図示している。したがって、読みやすくするためにいくつかのエラーチェックが省略され、説明する実装はスレッドセーフではなく、デフォルトの整合が仮定されている。他の実装では、より堅牢なエラーチェックを含み、スレッドセーフであり、かつ/またはデフォルトの整合を仮定しないこともできる。使用される特定の実装は、メモリプールが使用される特定のアプリケーションに依存し得ることを理解されたい。
-公開の「belong()」関数は、パラメータとして渡されたメモリポインタがバケットに属するかどうかをテストする。
-公開の「allocate()関数およびdeallocate()」関数は、バケット内のメモリブロックの割り当ておよび解放をそれぞれする。
-非公開の「find_contiguous_blocks()」関数は、パラメータとして数値「n」を受け取り、連続する「n」個のブロックの集合を見つけようとするものである。例えば、この関数は台帳のビットマップをスキャンして、連続した「n」個の空きブロックを表す、ビットマップ内の連続した「0」の列を探す。n個の連続した空きブロックが見つかった場合、その最初のブロックへのインデックスを返す。n個の連続した空きブロックが見つからなかった場合、ブロック数(BlockCount)を返す。
-非公開の「set_blocks_in_use()」関数は、インデックスと数値「n」とを受け取り、インデックスから始まる「n」個のブロックの集合を、割り当て済みまたは「使用中」としてマークする。例えば、この関数は、台帳のビットマップのインデックスから始まる「n」個のビット列を「1」に設定することができる。
-非公開の「set_blocks_free()」関数は、インデックスと数値「n」とを受け取り、インデックスから始まる「n」個のブロックの集合を、割り当て解除または「空き」としてマークする。例えば、この関数は、台帳のビットマップのインデックスから始まる「n」個のビット列を「0」に設定することができる。
割り当てが実行されるとき、アロケータは割り当てが1つのデータオブジェクトに対するものか、複数のデータオブジェクトに対するものかについての情報を持っていない。むしろ、アロケータは格納するデータのバイト数を受け取るだけである。つまり、割り当てレベルでは、格納するデータオブジェクトに関する情報は得られない。したがって、アロケータは、格納するデータオブジェクトの数ではなく、格納するデータのバイト数に基づいて、所与の割り当てに対して適切なバケットを選択しなければならない。この選択は、さまざまな方法で実装することができる。
開示された実施形態で使用されるアロケータは、「std::allocator_traits」と互換性があるC++アロケータモデルを実装してもよい。C++の多くの構成要素は、あるアロケータから別のアロケータへ静かに移行することができる。これにより、異なるコンテナ間でデータを移動するときに、アロケータが1つのメモリプールから別のメモリプールにデータを移動する可能性が生じ、非決定的メモリ割り当てを生じる可能性がある。したがって、一実施形態において、各アロケータは、アロケータがメモリプール間でデータを移動できないことを保証するために、コンパイル時にメモリプールの単一の特定のインスタンスにバインドされる。
注目すべきは、図19に示すように、静的プールアロケータ(static_pool_allocator::allocate)の「allocate()」関数において、割り当てが実行されているデータ型(T)が既知であることである。したがって、実行時にこの「allocate()」関数でデータ型のサイズを出力し、メモリ割り当てが行われているデータ型のサイズを実行時のログに記録することが可能である。しかし、これでは、すべてのデータ型に対する完全なカバレッジが保証されないため、理想的とは言えない。例えば、割り当てがまれなデータ型は、所与の有限の実行時間中に記録されずに終わるかもしれない。さらに、一部のアプリケーションで割り当ての完全なカバレッジが保証されたとしても、すべての実世界のアプリケーションでは不可能か非現実的である。さらに、開発者は一般に呼び出しグラフに関する情報(たとえば、実行時にどのように、そしてなぜ「allocate()」関数に到達したのか)を持っていない。したがって、すべての可能なデータ型が考慮されていることを証明することは困難である。
一実施形態では、実際の割り当てに応じたバケット定義を収集するために、まず、ソースコードをオブジェクトコードにコンパイルする。例えば、C++で書かれたソースコードの場合、ソースコードは、「Clang」コンパイラで、解析と操作とが容易な中間ビットコードである「LLVM(旧低レベル仮想マシンの頭文字)」ビットコードにコンパイルすることができる。ソースコードをコンパイルする際に、以下のパラメータをコンパイラに設定すると便利である(「Clang」コンパイラを仮定しているが、他のコンパイラにも翻訳可能である)。
-gは、呼び出しグラフを生成するための「file:line」情報を持つようにする。
-O0を指定して、コンパイラが最適化の際に注入されたダミー関数への呼び出しを削除してしまう可能性があるため、コンパイラに最適化を行わないようにする。
-emit-llvmは、ソースコードをネイティブ命令の代わりにビットコードにコンパイルするようにする。
-DNDEBUGは、データ構造のリリースバージョンを取得するようにする。
opt -load alloc-analyzer.so -alloc-analyze -gen-hdr my_defs.hpp -entry-point “main”< home/program.bc -o /dev/null
基本的にこのコマンドは、アロケータ解析ツール(alloc_analyzer.so)をロードし、ビットコードファイル(home/program.bc)の「main()」関数を起点として、ヘッダファイル(my_defs.hpp)を生成するものである。
有利なことに、本明細書で説明する実施形態は、安全性が重要なアプリケーションのための決定的メモリ割り当てを保証する。固定バケットサイズを有するメモリプールの使用は、決定的動作を保証することができるが、これらのメモリプールを適切に構成することは、例えば、C++アロケータモデルのコンテキストにおいて、複雑である。したがって、実施形態は、カスタムアロケータにインスツルメントコードを注入し、次に、各割り当ての属性を抽出するために、コンパイル時にインスツルメントコードを検出する。これらの属性は、次に、メモリプールを最適に構成するヘッダファイルを生成するために使用することができる。これは、リアルタイムおよび/または安全性が重要なアプリケーションのための、証明可能で決定的メモリ割り当てソリューションを示すものである。
開示された実施形態は、決定的メモリ割り当てが必要なまたは望ましい任意のソフトウェアアプリケーションにおいて決定的メモリ割り当てを提供するために利用することができる。最大の利点は、リアルタイムアプリケーション、特にリアルタイムで安全性が重要なアプリケーションにおいて見ることができる。そのようなアプリケーションには、限定されないが、自律または半自律車両、ロボット、重要なインフラストラクチャ(例えば、発電所、電力網、ネットワークなど)、ロケット、人工衛星、医療機器、および/または同種のものの制御および/または安全システムなどが含まれる。
Claims (18)
- 少なくとも1つのハードウェアプロセッサを使用することを含む方法であって、
ビットコードにアプリケーションのソースコードをコンパイルするステップであって、前記ソースコードは、複数のパラメータを使用するダミー関数を呼び出すメモリを割り当てるための割り当て関数を含み、かつ前記複数のパラメータは、メモリプールの識別子と前記メモリプールに格納するデータ型のサイズとを含む、ビットコードにアプリケーションのソースコードをコンパイルするステップと、
前記ビットコードをスキャンするステップと、
前記ビットコードをスキャンしながら、前記ビットコード内の前記ダミー関数への各呼び出しを検出するステップと、
前記ダミー関数への各呼び出しに対して、前記ダミー関数への前記検出された呼び出しで使用された前記複数のパラメータを抽出し、かつ前記抽出された複数のパラメータから、前記メモリプールの前記識別子と前記データ型の前記サイズとを含む割り当てレコードを生成するステップと、
前記生成された割り当てレコードから割り当てレコードリストを生成するステップと、
前記割り当てレコードリストに基づいてヘッダファイルを生成するステップであって、前記ヘッダファイルは、1つ以上のバケットの定義と、1つ以上のメモリプールの各定義とを含み、前記1つ以上のメモリプールの各定義は、前記1つ以上のバケットのうちの少なくとも1つを特定する、前記割り当てレコードリストに基づいてヘッダファイルを生成するステップと、
前記ソースコードを前記ヘッダファイルで再コンパイルするステップと、を含む方法。 - 前記1つ以上のバケットの各々の定義は、ブロック数とブロックサイズとを含む、請求項1に記載の方法。
- 前記ヘッダファイルを生成するステップは、前記割り当てレコードリスト中の各一意なサイズに対して、その一意なサイズに整合するブロックサイズを含むバケットの少なくとも1つの定義を生成するステップを含む、請求項2に記載の方法。
- 前記ヘッダファイルを生成するステップは、前記割り当てレコードリスト中の各一意な識別子に対して、その識別子を有するメモリプールの定義を生成するステップをさらに含む、請求項3に記載の方法。
- メモリプールの各定義は、前記割り当てレコードリスト中のそのメモリプールの前記識別子に関連付けられている各一意なサイズに対して、ブロックサイズがそのサイズに整合する前記1つ以上のバケットのうちの1つの定義への参照を含む、請求項4に記載の方法。
- そのサイズに整合するブロックサイズを含むバケットの少なくとも1つの定義を生成するステップは、そのサイズに一致するブロックサイズを含むバケットの定義を生成するステップを含む、請求項3に記載の方法。
- 前記1つ以上のメモリプールの各々の前記定義はタプルを含み、前記タプルは1つ以上の参照を含み、かつ前記1つ以上の参照の各々は前記1つ以上のバケットの1つを特定する、請求項1に記載の方法。
- 前記ビットコードにおいて、前記割り当て関数の各インスタンスは、前記割り当て関数が単一のメモリプール以外の任意のメモリプールから割り当てられないように、前記単一のメモリプールにバインドされている、請求項1に記載の方法。
- 前記割り当て関数は、
前記メモリプールが未定義である間、前記アプリケーションが利用可能な上流リソースからメモリを割り当て、
前記メモリプールが定義されている間、前記メモリプールからメモリを割り当てるように構成されている、請求項1に記載の方法。 - 前記ソースコードは、C++プログラミング言語で記述されている、請求項1に記載の方法。
- 前記割り当て関数は、前記C++プログラミング言語のアロケータモデルに従ったカスタムアロケータである、請求項10に記載の方法。
- 前記少なくとも1つのハードウェアプロセッサを使用して、前記1つ以上の割り当ての各々に対して、前記アプリケーションのエントリポイントから前記割り当て関数への関数呼び出しのパスを表す呼び出しグラフを生成するステップをさらに含む、請求項1に記載の方法。
- 前記複数のパラメータは、前記メモリプールに格納する前記データ型の識別子をさらに含む、請求項1に記載の方法。
- その中に格納された命令を有する非一時的コンピュータ可読媒体であって、前記命令は、プロセッサによって実行されたとき、前記プロセッサに、
ビットコードにアプリケーションのソースコードをコンパイルするステップであって、前記ソースコードは、複数のパラメータを使用するダミー関数を呼び出すメモリを割り当てるための割り当て関数を含み、かつ前記複数のパラメータは、メモリプールの識別子と前記メモリプールに格納するデータ型のサイズとを含む、ビットコードにアプリケーションのソースコードをコンパイルするステップと、
前記ビットコードをスキャンするステップと、
前記ビットコードをスキャンしながら、前記ビットコード内の前記ダミー関数への各呼び出しを検出するステップと、
前記ダミー関数への各呼び出しに対して、前記ダミー関数への前記検出された呼び出しで使用された前記複数のパラメータを抽出し、かつ前記抽出された複数のパラメータから、前記メモリプールの前記識別子と前記データ型の前記サイズとを含む割り当てレコードを生成するステップと、
前記生成された割り当てレコードから割り当てレコードリストを生成するステップと、
前記割り当てレコードリストに基づいてヘッダファイルを生成するステップであって、前記ヘッダファイルは、1つ以上のバケットの定義と、1つ以上のメモリプールの各定義とを含み、前記1つ以上のメモリプールの各定義は、前記1つ以上のバケットのうちの少なくとも1つを特定する、前記割り当てレコードリストに基づいてヘッダファイルを生成するステップと、
前記ソースコードを前記ヘッダファイルで再コンパイルするステップと、を行わせる、非一時的コンピュータ可読媒体。 - 前記1つ以上のバケットの各々の前記定義は、ブロック数とブロックサイズとを含む、請求項14に記載の非一時的コンピュータ可読媒体。
- 前記ヘッダファイルを生成するステップは、
前記割り当てレコードリスト中の各一意なサイズに対して、その一意なサイズに整合するブロックサイズを含むバケットの少なくとも1つの定義を生成するステップと、
前記割り当てレコードリスト中の各一意な識別子に対して、その識別子を有するメモリプールの定義を生成するステップであって、メモリプールの各定義は、前記割り当てレコードリスト中のそのメモリプールの前記識別子に関連付けられている各一意なサイズに対して、ブロックサイズがそのサイズに整合する前記1つ以上のバケットのうちの1つの定義への参照を含む、その識別子を有するメモリプールの定義を生成するステップと、を含む請求項15に記載の非一時的コンピュータ可読媒体。 - 前記割り当て関数は、C++プログラミング言語のアロケータモデルに従ったカスタムアロケータである、請求項14に記載の非一時的コンピュータ可読媒体。
- 少なくとも1つのハードウェアプロセッサと、
1つ以上のソフトウェアモジュールであって、前記少なくとも1つのハードウェアプロセッサによって実行されるとき、
ビットコードにアプリケーションのソースコードをコンパイルするステップであって、前記ソースコードは、複数のパラメータを使用するダミー関数を呼び出すメモリを割り当てるための割り当て関数を含み、前記複数のパラメータは、メモリプールの識別子と前記メモリプールに格納するデータ型のサイズとを含む、ビットコードにアプリケーションのソースコードをコンパイルするステップと、
前記ビットコードをスキャンするステップと、
前記ビットコードをスキャンしながら、前記ビットコード内の前記ダミー関数への各呼び出しを検出するステップと、
前記ダミー関数への各呼び出しに対して、前記ダミー関数への前記検出された呼び出しで使用された前記複数のパラメータを抽出し、かつ前記抽出された複数のパラメータから、前記メモリプールの前記識別子と前記データ型の前記サイズとを含む割り当てレコードを生成するステップと、
前記生成された割り当てレコードから割り当てレコードリストを生成するステップと、
前記割り当てレコードリストに基づいてヘッダファイルを生成するステップであって、前記ヘッダファイルは、1つ以上のバケットの定義と、1つ以上のメモリプールの各定義とを含み、前記1つ以上のメモリプールの各定義は、前記1つ以上のバケットのうちの少なくとも1つを特定する、前記割り当てレコードリストに基づいてヘッダファイルを生成するステップと、
前記ソースコードを前記ヘッダファイルで再コンパイルするステップと、を行うように構成されている1つ以上のソフトウェアモジュールと、を含むシステム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2022143286A JP2022174757A (ja) | 2021-05-11 | 2022-09-08 | リアルタイムアプリケーションのための決定的メモリ割り当て |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/317,767 US11194556B1 (en) | 2021-05-11 | 2021-05-11 | Deterministic memory allocation for real-time applications |
US17/317,767 | 2021-05-11 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022143286A Division JP2022174757A (ja) | 2021-05-11 | 2022-09-08 | リアルタイムアプリケーションのための決定的メモリ割り当て |
Publications (2)
Publication Number | Publication Date |
---|---|
JP7140935B1 true JP7140935B1 (ja) | 2022-09-21 |
JP2022174732A JP2022174732A (ja) | 2022-11-24 |
Family
ID=78818747
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022077352A Active JP7140935B1 (ja) | 2021-05-11 | 2022-05-10 | リアルタイムアプリケーションのための決定的メモリ割り当て |
JP2022143286A Pending JP2022174757A (ja) | 2021-05-11 | 2022-09-08 | リアルタイムアプリケーションのための決定的メモリ割り当て |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2022143286A Pending JP2022174757A (ja) | 2021-05-11 | 2022-09-08 | リアルタイムアプリケーションのための決定的メモリ割り当て |
Country Status (3)
Country | Link |
---|---|
US (3) | US11194556B1 (ja) |
EP (2) | EP4343539A3 (ja) |
JP (2) | JP7140935B1 (ja) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11814086B1 (en) * | 2022-10-20 | 2023-11-14 | Rivian Ip Holdings, Llc | Middleware software layer for vehicle autonomy subsystems |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050120162A1 (en) * | 2003-11-27 | 2005-06-02 | International Business Machines Corporation | Memory dump of a computer system |
JP2006155516A (ja) * | 2004-12-01 | 2006-06-15 | Ntt Docomo Inc | メモリ管理装置、メモリ管理システム及びメモリ管理方法 |
Family Cites Families (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5491808A (en) * | 1992-09-30 | 1996-02-13 | Conner Peripherals, Inc. | Method for tracking memory allocation in network file server |
US6314558B1 (en) * | 1996-08-27 | 2001-11-06 | Compuware Corporation | Byte code instrumentation |
US5893086A (en) * | 1997-07-11 | 1999-04-06 | International Business Machines Corporation | Parallel file system and method with extensible hashing |
US6253226B1 (en) * | 1998-06-24 | 2001-06-26 | Oracle Corporation | Duration-based memory management of complex objects |
US6327606B1 (en) * | 1998-06-24 | 2001-12-04 | Oracle Corp. | Memory management of complex objects returned from procedure calls |
US7877421B2 (en) * | 2001-05-25 | 2011-01-25 | International Business Machines Corporation | Method and system for mapping enterprise data assets to a semantic information model |
CA2384185A1 (en) * | 2002-04-29 | 2003-10-29 | Ibm Canada Limited-Ibm Canada Limitee | Resizable cache sensitive hash table |
FR2901949B1 (fr) * | 2006-05-30 | 2008-09-05 | Nds Technologies France Soc Pa | Procede de mise en veille d'un decodeur de television numerique et decodeur numerique a mode veille basse consommation |
US9038041B2 (en) * | 2006-12-04 | 2015-05-19 | Tibco Software, Inc. | Stream processor with compiled programs |
US8863091B2 (en) * | 2007-10-19 | 2014-10-14 | Oracle International Corporation | Unified tracing service |
US8392895B2 (en) * | 2009-01-13 | 2013-03-05 | Mediatek Inc. | Firmware extension method and firmware builder |
US8539199B2 (en) * | 2010-03-12 | 2013-09-17 | Lsi Corporation | Hash processing in a network communications processor architecture |
US8707161B2 (en) * | 2009-09-30 | 2014-04-22 | Facebook, Inc. | Executing server side script code specified using PHP on a server to generate dynamic web pages |
US9785470B2 (en) * | 2011-06-20 | 2017-10-10 | Microsoft Technology Licensing, Llc | Memory management model and interface for unmodified applications |
US9684492B2 (en) * | 2015-09-28 | 2017-06-20 | Semmle Limited | Automatic determination of compiler configuration |
US10949741B2 (en) * | 2016-07-22 | 2021-03-16 | Board Of Regents, The University Of Texas System | Generating sets of training programs for machine learning models |
US10296314B2 (en) * | 2016-11-01 | 2019-05-21 | Facebook, Inc. | Detecting and remedying memory leaks caused by object reference cycles |
FR3069670A1 (fr) * | 2017-07-27 | 2019-02-01 | Safran Identity and Security | Pare-feu logiciel |
US10769075B2 (en) * | 2018-05-10 | 2020-09-08 | Sap Se | Storage of database dictionary structures in non-volatile memory |
US11797539B2 (en) * | 2019-09-12 | 2023-10-24 | Oracle International Corporation | Accelerated building and probing of hash tables using symmetric vector processing |
-
2021
- 2021-05-11 US US17/317,767 patent/US11194556B1/en active Active
- 2021-11-01 US US17/516,393 patent/US11755298B2/en active Active
-
2022
- 2022-05-10 EP EP24154253.9A patent/EP4343539A3/en active Pending
- 2022-05-10 EP EP22172582.3A patent/EP4089527B1/en active Active
- 2022-05-10 JP JP2022077352A patent/JP7140935B1/ja active Active
- 2022-09-08 JP JP2022143286A patent/JP2022174757A/ja active Pending
-
2023
- 2023-07-07 US US18/219,304 patent/US12118337B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050120162A1 (en) * | 2003-11-27 | 2005-06-02 | International Business Machines Corporation | Memory dump of a computer system |
JP2006155516A (ja) * | 2004-12-01 | 2006-06-15 | Ntt Docomo Inc | メモリ管理装置、メモリ管理システム及びメモリ管理方法 |
Also Published As
Publication number | Publication date |
---|---|
US12118337B2 (en) | 2024-10-15 |
JP2022174757A (ja) | 2022-11-24 |
EP4089527A1 (en) | 2022-11-16 |
JP2022174732A (ja) | 2022-11-24 |
US20220365764A1 (en) | 2022-11-17 |
US11755298B2 (en) | 2023-09-12 |
US20230350655A1 (en) | 2023-11-02 |
EP4343539A2 (en) | 2024-03-27 |
US11194556B1 (en) | 2021-12-07 |
EP4343539A3 (en) | 2024-06-19 |
EP4089527B1 (en) | 2024-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9690554B2 (en) | Unified data type system and method | |
US8707278B2 (en) | Embedding class hierarchy into object models for multiple class inheritance | |
US8863079B2 (en) | Efficient and expansive conversions between reference and primitive | |
DK1174791T3 (en) | Total data type system and method | |
JP4896384B2 (ja) | メモリを効率的に管理するための方法およびプログラム | |
US20210124583A1 (en) | Conditional Branch Frame Barrier | |
KR20010093312A (ko) | 토큰 기반 링크 | |
US10606614B2 (en) | Container-based language runtime using a variable-sized container for an isolated method | |
JP7140935B1 (ja) | リアルタイムアプリケーションのための決定的メモリ割り当て | |
US20180329817A1 (en) | Performing garbage collection on an object array using array chunk references | |
CN117785540A (zh) | 内存错误检测方法、装置、设备及介质 | |
US11651130B2 (en) | Method, device, and storage medium for simulating a design | |
Colnet et al. | Exploiting array manipulation habits to optimize garbage collection and type flow analysis | |
US6793143B2 (en) | Data carrier | |
Xi | The ATS Programming Language | |
US11789863B2 (en) | On-the-fly remembered set data structure adaptation | |
US20240338186A1 (en) | Compile-Time Checking For Exhaustive Switch Statements And Expressions | |
CN118672587A (zh) | 智能合约编译方法、系统、电子设备和目标代码运行方法 | |
Beevi et al. | MetaJC++: A flexible and automatic program transformation technique using meta framework | |
Tang et al. | Summary-based data-flow analysis that understands regular composite objects and iterators |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20220711 |
|
A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20220711 |
|
A871 | Explanation of circumstances concerning accelerated examination |
Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20220711 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20220809 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20220908 |
|
R150 | Certificate of patent or registration of utility model |
Ref document number: 7140935 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |