問題タブ [memory-access]
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.
c - C を使用して、別の C プログラムと同じメモリ ブロックにアクセスするにはどうすればよいですか?
だから、私は C の学習の 1 時間目です。今夜は C++ にジャンプするかもしれません。
C を使用して、相互に「対話」できる 2 つのコマンド ライン プログラムを作成したいと考えています。頭に浮かんだ最初の考えは、ファイルへの書き込みとポーリングによって 2 つの間で情報を転送することです。ただし、C には、メモリを直接割り当ててアクセスするために必要なすべてのメソッドが用意されていると思います。これは、はるかに高速で賢明な手法です。
誰かが例やアドバイスを提供できますか?
cuda - CUDAでは、メモリの合体とは何ですか、そしてそれはどのように達成されますか?
CUDAグローバルメモリトランザクションの「合体」とは何ですか?CUDAガイドを読んでも理解できませんでした。どうやってするの?CUDAプログラミングガイドのマトリックスの例では、行ごとにマトリックスにアクセスすることを「合体」と呼び、列ごとに列にアクセスすることを合体と呼びます。どちらが正しいのか、そしてその理由は?
openmp - OpenMP C 並列化アルゴリズム
本の「Using OpenMP」は、Cでの悪いメモリアクセスの例であり、ガウスアルゴリズムを並列化しようとする私の試みの主な問題だと思います。
例は次のようになります。
だから、なぜこれが悪いメモリアクセスを引き起こすのか理解しています。C では 2 次元配列は行ごとに格納され、ここでは i ステップごとに新しい行がメモリからキャッシュにコピーされます。
これに対する解決策を見つけようとしていますが、スピードアップがうまくいきません。私の試みの影響は軽微です。
誰かが私に何ができるかのヒントを教えてもらえますか?
最も簡単な方法は for ループを交換することですが、私は列ごとに行いたいと考えています。
2 回目の試行:
まったく違いはありませんでした。
3 回目の試行:
ありがとう
ステップに挨拶
c - malloc()の実行中のEXC_BAD_ACCESS(KERN_INVALID_ADDRESS)
次のGCCを使用してMacOSXSnowLeopardでCライブラリをコンパイルしています。
このライブラリ( CuTestで記述されている)のいくつかの単体テストを実行すると、テストの1つに問題が発生しました。それはEXC_BAD_ACCESS
シグナルです。これは通常の問題であり、この種の問題についてある程度理解しています。私はLinuxの人で、これを「セグメンテーション違反」と呼び、何が起こっているのか、問題を解決する通常の方法を理解しています。驚くべきことは、不正なアクセスが関数の実行内で実行malloc
されることです。私がGDBに持っているこのバックトレースを見てください:
このテストケースには次の行があり、エラーは常に4番目の行で発生します。なんらかの方法で回線を切り替えても、4番目の回線でも問題が発生します。
では、どのようにしてそのmalloc()
ような問題を引き起こすことができますか?私もそれにポインタを渡しません!バグですか?誰かがこのようなものを見たことがありますか?
前もって感謝します!
c++ - 他のアプリケーションのメモリへのアクセスC++
私は今しばらくの間抱えている問題について考えています。メモリ(スタック、ヒープ、すべて)にアクセス(値の読み取り/変更)できるC / C ++プログラム(最初はWindowsの下)を作成したいと思います。他の実行中のプログラム。(共有メモリとは異なり、コンピュータにあるメモリです。)自分のアプリケーションからアプリケーションを起動する必要はありません。以前にこのようなものを見たことがありますが、それがどのように行われるのか理解できません。実行中のプログラムのメモリにアクセスすると、OSからエラーが発生しますか?どんな助けでも大歓迎です!
c++ - C ++の(符号なし)char *を介して読み取り可能な有効なメモリ位置を読み取ることはできますか?
私の検索fooは今日欠けているようです。
std C ++に従って、(unsigned(?))char*を介して「任意の」メモリ位置を検査することが合法かどうかを知りたいです。任意の場所とは、プログラム内のオブジェクトまたは配列(または配列内)の有効なアドレスを意味します。
例として:
免責事項:この質問は純粋に学術的なものです。これを本番コードに入れるつもりはありません!合法とは、標準に従って本当に合法であるかどうか、つまり、すべての実装の100%で機能するかどうかを意味します。(x86や一部の一般的なハードウェアだけではありません。)
サブ質問:static_cast
void*アドレスからchar*ポインターに到達するための適切なツールはありますか?
file-io - MinGW に fmemopen() はありますか
MinGW でfmemopen関数を使用するコードをコンパイルしようとしています。この機能は MinGW では利用できないことがわかりました。に相当する関数が必要fmemopen()
です。
使用できる代替機能はありますか?
c++ - 建設中の非定発電機シングルパス初期化
最初にすべての要素をゼロに初期化せずにstd::vector
、初期化されていない(ゼロ以外の)値を使用して、またはジェネレーター(に類似std::generate_n()
)コンストラクター引数を使用して、目的の非標準(非定数)値を生成する新しいものを作成する方法はありますか?これは、(ランダムな)モックアップ作成APIを可能な限りローカリティ効率の高いものにし、コンテナー要素を1回だけ書き込むためです。(そしておそらく他の人たち)のためのジェネレーターコンストラクターを持っているのは素晴らしいことではないでしょうか?!なぜC++はこれを標準に追加していないのですか?std::vector
次のコンストラクターのようなC関数は、次のカスタム初期化構文に対して私が求める1回限りの書き込み動作を示していますstd::vector
。
これは、最初のゼロを書き込む(または書き込まない)責任があるため、使用されるSTLアロケータの動作に要約されると思います。
イテレータでコンストラクタを使用する場合は、std::vector
最初にランダムな値を別の場所に割り当てて書き込む必要があります。これは、を使用するよりもさらに悪いことですpush_back()
。
cuda - 共有メモリでの Bank-Conflict-Free アクセス
サイズが 64 要素で、32 バンクの 2 倍の共有メモリを使用する必要があります。したがって、メモリアクセスの数がワープ内のスレッド数の 2 倍になる場合があります。銀行の競合のないアクセスを実現するには、どのように対処すればよいですか?
x86 - 次のアセンブリ命令はadded-8(%rbp)、%xmm0を何をしますか?
アセンブリ命令が実際に何をするのかを理解しようとしています
これは、SSE2を搭載したx86-64マシンでの浮動小数点の追加であることを私は知っています。また、%xmm0がレジスターであることも知っています。ただし、私にはわからないのは、-8(%rbp)の意味です。マニュアルはそれについて少し混乱しています。
基本的に、問題は、-8(%rbp)は、レジスタから値を取得していることを意味しますか(おそらく、rbpの最後の8バイト)、メモリから値を取得していることを意味します(-8のオフセットでの浮動小数点値rbpに含まれるアドレス)。