問題タブ [thunk]
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.
haskell - サンクはどのくらいのメモリを使用しますか?
これらの単純なFoo
データ構造が非常に多数 (数百万/数十億以上) あるとします。
これらが非常に多く出回っているため、それらが消費するメモリの量を考慮する必要があります。
64 ビット マシンでは、それぞれInt
が 8 バイトであるため、a
8 バイトしか使用しません (厳密でアンパックされているため)。しかし、どのくらいのメモリを占有するのb
でしょうか? サンクが評価されるかどうかで変わると思いますよね?
評価が必要なb
場合にのみメモリにとどまっているメモリ位置の数に依存する可能性があるため、一般的なケースではこれを伝えることは不可能だと思います。b
しかしb
、(いくつかの非常に高価な操作) のみに依存しているとしたらどうa
でしょうか? それでは、どのくらいのメモリが使用されるかを決定論的に知る方法はありますか?
lambda - Opa: 高階関数適用
Opaでは機能を部分的に適用することが可能です。ただし、関数にすべての引数を指定して、引数を取らない関数を返したいと思います。例えば:
上記のコードは正常に動作しますが、1 つの問題があります。これは、引数を 1 つだけ取る関数にしか適していません。Opaで上記をより一般的にすることが可能かどうかに興味があります。そのため、関数は任意のアリティの関数に使用できます。
Opa API、フォーラム、IRC、Github、または SO で apply- (scheme) または call- (prolog) のような関数に関する情報を見つけることができませんでした。;-) (@lazy キーワードの痕跡がいくつかありましたが、説明もドキュメントもなかったので参照しませんでした。申し訳ありません。)
さらに明確化/説明するには: Opa がスキームである場合、次のコードを記述します。
winapi - 自身のプロセスに ExitProcess をフックする IAT
自分のプロセスへの IAT フックについて質問したいのですが。
現在、ExitProcess をフックして、ExitProcess 呼び出しの前に特定の関数を実行しようとしていますが、いくつかの問題に直面しています。
実行時に PE をトラバースし、 IMAGE_IMPORT_DESCRIPTOR を通過し、kernel32.dll (最初の .dll) を見つけた後、THUNK_DATA-s を名前でトラバースし、そこに ExitProcess を見つけようとしていますが、運はありません。
関数のログ、それらはそこにある関数です -
ExitProcess は 内のどこにもありませんが。
同様に失敗しましたが、名前の代わりに関数ポインターで列挙しようとしました(originalthunkdataの代わりにthunkdataを使用)。
ExitProcess の GetProcAddress は PE 内のポインターを返します。結果は同じですが、loadlibrary によって強制的に (自動的に読み込まれるはずですが) kernel32.dll を読み込もうとしました。
何が問題なのですか?
どうもありがとうございました。素晴らしい一日を!
c - matlabによって生成されたサンクファイルの目的は何ですか?
外部 C ライブラリ (DLL) を matlab から呼び出すと、matlab は最初filename_thunk_pcwinXX.dll
に temp ディレクトリに (XX は OS によって 32 または 64 のいずれかになります) という名前のサンク ファイルを生成しようとするようです。
matlab ドキュメントでは、このファイルは外部 DLL と Matlab の間のインターフェイスであると述べられているため、元の外部 DLL の他のデータは含まれていません。
問題は、実行時に他のライブラリを呼び出す可能性のあるライブラリを作成したことです。ライブラリが特定のライブラリを呼び出すと、matlab は常に奇妙な結果をもたらすか、クラッシュすることさえあります (すべてではありません。私のライブラリとここの他のライブラリは 64 ビットです)。 DLL)。
また、matlab の代わりに他の C/C++ プログラムから呼び出された場合、すべてのライブラリ関数は問題なく動作します。
matlab を適切に動作させるために、実行時にライブラリによって呼び出されるこれらの他のライブラリも、何らかのサンク ファイルを取得する必要があるのでしょうか。信じられませんが、matlabが外部ライブラリを処理する正確な方法もわかりません。
lazy-evaluation - scala には、1 回またはまったく評価されない遅延サンクのクラスがありますか?
シンプルなもの
どこかで定義されていますか?
あるいはもう少し洗練された
c++ - メモリ内のアドレスによってシンボルに関する詳細情報を取得するにはどうすればよいですか?
メモリ内のアドレスでシンボル名を取得しようとしています。int dladdr(void *addr, Dl_info *info)
関数fromを使用dlfcn.h
して情報を取得します。
ただし、この関数はアドレスに一致するシンボルを見つけることができず、dli_snameとsaddrをNULLに設定します。
この場合、シンボルの名前またはシンボルに関するその他の情報(種類、属性など)を取得するにはどうすればよいですか?
注:私が見つけようとしているシンボルの名前はです_ZTv0_n24_N4QGst13PropertyProbeD0Ev
。これは、クラスのvtableに次のようにリストされていQGst::PropertyProbe
ますg++ -fdump-class-hierarchy
。
しかし、シンボルdladdr
によって共有オブジェクトを調べ、仮想関数ポインターのリストを反復処理したときに取得したアドレスでは見つかりません。v-tableの他のすべての関数は、によって検出されます。dlopen
dlsym
_ZTVN4QGst13PropertyProbeE
dladdr
c++ - 仮想サンクへの未定義の参照
と言うエラーが出ました
私が作成しようとしているライブラリの場合。
これが私のコードです:
.
.
私はライブラリの作成にあまり慣れていません。私はQtCreatorの下にいます。
「仮想サンク」は、見つからない何か(デストラクタ?)への「関数ポインタ」である可能性があることがわかりました...
しかし、インターネット上で明確なものは何も見つかりませんでした...
c# - 非静的コールバックはネイティブ コードからどのように機能しますか?
動作しないように思われるコードがあるため、この質問をするのは少し奇妙ですが、動作します。不満はありませんが、理由を確認したいですか? 笑
簡単に言えば、C# コードからコールバックを受け取る C++ ネイティブ DLL (CLR/マネージ サポートはまったくない) があります。ネイティブ側は、C# 側によって提供される stdcall コールバック関数を格納します。コールバック METHOD (C# の場合) は静的でなければならないといつも思っていましたが、非静的とラムダ式の両方が正常に機能します!? 「this」ポインタはネイティブコードからどのようにマーシャリングされていますか? ネイティブ コードは非インスタンス関数ポインターのみを格納するといつも思っていました。
さて、ある人が IL コードを発行して、ネイティブと非静的マネージド コールバックの間を「ブリッジ」するという記事を見つけました。また、この廃止されたメソッド「Marshal.GetUnmanagedThunkForManagedMethodPtr()」にも気付きました。このメソッドはサポートされなくなりましたが、これは組み込まれていることを意味していると思いますか?
質問の要約:
thunking は、IL コードを発行することによって .NET にネイティブに組み込まれるようになりましたか? もしそうなら、どのバージョンの .NET でこれがネイティブにサポートされましたか?
暗黙の「サンク」は Mono でもサポートされていますか?
IL がマネージ コールバックに対して発行される場合、サンクが参照するインスタンスが削除されるとどうなりますか? IL は削除されていますか、それとも、いわばメモリの「リーク」につながる可能性がありますか?
ありがとう。
scheme - サンク オブジェクトの評価はどのように機能しますか?
SICP のこのactual-value
章では、サンクの実際の値を抽出するための の定義は次のようになっています。
しかし、exp
それ自体がサンクである場合はどうなるでしょうか。の定義に基づくと、delay-it
それはフォームのリスト オブジェクトであることを意味します(list 'thunk exp env)
。ただし、eval関数は、「thunk. cond 式が一致しないために eval がエラーを生成しないのはなぜですか?
編集: 次の式を評価するとエラーが発生するはずだと思います:
add
は複合手続きであるため、delay-it
適用される前にその引数に対して実行されます。+
つまりactual-value
、引数で呼び出されます。引数は 2 と a です。a は thunk オブジェクトです。したがって、actual-value
に渡すとエラーが発生するはずです。eval
これeval
は、「thunk.