グローバルフック内でmapやvectorを使いたい。 – プログラミング – Home

グローバルフック内でmapやvecto...
 
通知
すべてクリア

グローバルフック内でmapやvectorを使いたい。


東方
 東方
(@東方)
ゲスト
結合: 16年前
投稿: 1
Topic starter  

お世話になっております。

現在、グローバルフックのプログラムを
作成してます。
複数のプロセスで参照したいものがあり
mapをdata_seg内に定義したのですが
、要素数が増えません。

このようなんことは難しいのでしょうか
サイズ固定の変数としてプログラムを
作成しないといけないのでしょうか。


引用解決済
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

そうですね。
data_seg 内に置く変数は、コンパイル時にサイズが定まっている必要があります。

vector って、&vector と &vector[0] が同じ値になる保証ってありましたっけ?
無いなら、&vector は data_seg 内にあっても、&vector[0] はセグメント外(ヒープ)
に置かれている可能性もあります。
map も同様。


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

> vector って、&vector と &vector[0] が同じ値になる保証ってありましたっけ?

ないと思います。
動的にメモリを確保せずに、固定メモリでvectorを実装することは可能かもしれません
が、
default allocatorはまずそうなってませんし、自作でもしない限りヒープ上では?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

data_segからメモリを取得/解放するアロケータ:tiny_allocator<T>を用意すればよさ
げ。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 21年前
投稿: 600
 

data_segからメモリを取得/解放するグローバルな operator new/delete を再定義して
もいいかな。


返信引用
にくきゅう
 にくきゅう
(@にくきゅう)
ゲスト
結合: 16年前
投稿: 1
 

> data_segからメモリを取得/解放する
これでもDLLロード時のベースアドレスが異なった場合、ポインタがずれてダメじゃない
ですかね。

DLL 内のデータをアプリケーションまたはほかの DLL と共有する方法
http://msdn.microsoft.com/ja-jp/library/h90dkhs0.aspx

『Microsoft ではプロセス間での C++ オブジェクトの共有をお勧めできません』とある
ので、特別な理由でもない限り避けた方が良いのではないかと。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました