問題タブ [memory-layout]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
142 参照

c++ - クラス階層のメモリ レイアウト

私の目標は、いくつかの共通データを共有するクラス階層のクラスのインスタンスを作成することです。割り当てられたメモリで最大のインスタンスを作成できるように、( union を使用して) 十分なメモリを作成します。ここで、クラスのインスタンスを作成/交換し、そこのメモリで「古い」データを使用したいと考えています。これは有効な/合法的な操作ですか?

元のコードでは、いくつかの MTP を使用して共用体を作成しています。ターゲットは、このクラス階層をステート マシン実装のコアとして使用することです。ここでは、問題を含む基本的なコードのみを示します。

基本クラスに仮想メソッドが含まれていなくても、派生クラスには含まれていると問題になることがわかりました。これは、vtable-pointer がメモリの前に移動するためです (x86/linux の gcc を使用)。

簡単な質問: 基本クラスのインスタンスが以前に作成されていて、その派生クラスのインスタンスでメモリが再利用されている場合、派生クラスのインスタンスは基本クラスのデータにアクセスできますか?

0 投票する
4 に答える
531 参照

c++ - C++ 構造体はクラスにコンパイルされますか?

私はC++に取り組んでいます。MVSV2010を使用しています。

ソース コードをコンパイルし、-d1reportAllClassLayout を使用してすべてのクラスのメモリ レイアウトをダンプすると、.

たとえば、構造体を宣言します。

構造体のメモリ レイアウトは次のとおりです。

C++ コンパイラはすべてにおいて構造体をクラスと同じと見なすということですか? (デフォルトのアクセス指定子を除く)

だとすれば、struct のコンストラクタとデコンストラクタはどうでしょうか。

構造体のデフォルトのコンストラクターとデコンストラクターはありますか? そしてそれはクラスに似ていますか?

ご支援いただき、誠にありがとうございます。

0 投票する
5 に答える
358 参照

c++ - オブジェクトの構築を禁止するには?

オブジェクトの構築を禁止するにはどうすればよいですか? = delete;関連するすべての特殊機能を次のようにマークします。

LIVE EXAMPLE

しかしxyそして*zまだ存在することができます。何をすべきか?私は両方のケースに興味があります。静的/スタック割り当てとヒープ割り当て。

0 投票する
0 に答える
1260 参照

android - Android Linux カーネルの仮想メモリ レイアウト

メモリ不足の問題の原因を突き止めようとしています。私はカーネルを持っています。ビルドしようとしています(情報: Freescale SabreSD から Solidrun Hummingboard、バージョン 3.10、Android ディストリビューションまで)。私のシステムには512MBの物理メモリがあります。

私のカーネルは、この仮想メモリ レイアウトで起動します。

動作中の3.0.35 カーネルは、次の仮想メモリ レイアウトで起動します。

私の理解では、vmalloc 領域が大きすぎて、lowmem が物理的に使用可能なメモリと一致します。それは私の仮定ですよね?どのような構成を見ればよいですか?

このメモリマップを変更するために、カーネルまたはブートローダーにどのような構成変更を行う必要があるかを理解しようとしています (そして、私が推測しているように、それが本当に間違っている場合)。カーネルは、コマンド ラインの vmalloc パラメータを無視します(現在は 400M のデフォルトです。おそらく、少なくともこのサイズに設定されているためです)。メモリ レイアウトは KConfig のどこかに設定されていますか、それとも Uboot で初期化されていますか? 適切な場所を見つけるのを手伝ってもらえますか?

編集

CONFIG_VMSPLIT_2G を CONFIG_VMSPLIT_3G に変更すると、次のメモリ マップが表示されます。

しかし、Init にはまだ「メモリ不足」の例外があります。

ブート ログの詳細は次のとおりです。

メモリが不足している理由について何か考えはありますか?