問題タブ [sbrk]

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 投票する
1 に答える
1480 参照

memory-management - sbrk は割り当てを開始するアドレスをどのように知るのですか?

私はアセンブリの初心者であり、sbrk が思い通りにメモリを割り当てるのに苦労しています。私は最終的に 2D 配列を作成したいと考えています。最初に 1 つの列を割り当て、次に各行を調べて、一度に 1 つの行を割り当てます。しかし、sbrk を 2 回目に使用すると、未使用のメモリ ロケーションから開始するのではなく、既に割り当てたメモリ アドレスを上書きすることに気付きました。私が間違っていることを見つけるために、今のところ 1D 配列を使用することにしました。

初めて使うときは

メモリブロックを割り当てます0x10040000。次に、割り当てた 3 つの場所に 3 つの整数を入力します。その後、別の sbrk を実行して、開始アドレスを確認します。0x10040004それを行うと、入力した整数の1つを上書きして割り当てます。以下は私が使用したコードです。

このプログラムが終了する$s1 = 0x10040000と、$s2 = 0x10040004.

sbrk が既に割り当てられている場所からメモリを割り当てるのはなぜですか? 特定のアドレスから開始するように指示する方法はありますか? 意味をなさないことをしている場合は、修正してください。

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

c - Cのsbrkとmalloc

次のコードがあります

すべての void ポインターの数値と、フォーム malloc と呼ばれる sbrk 関数の回数を出力したいですか?

*endptr を printf ステートメントで出力すると、エラーが発生します。現在、メモリが割り当てられているアドレスを出力すると思います。%x は、現在の値を 16 進数に変換して正しく出力しますか?

x = malloc(60) もエラーを返します: void 値は本来あるべきように無視されません どうすればそれを行うことができますか?

ありがとう

0 投票する
1 に答える
197 参照

c - 奇妙な未知の理由によるセグメンテーション違反

segmentation fault (core dumped)次の平和なコードを取得します( malloc()free()および を実装していますrealloc()):

aaaここで、 orが出力されると仮定すると、インライン Xbbbを実行した直後にセグメンテーション違反が通知されるだけですprintf()。現在の代わりに「printf("a")」と入力すると、「a」は出力printf()されません。まったく。それは本当に奇妙です。それは印刷します:

それでも、終了してすぐにセグメンテーション違反をスローします。変数headは、そのファイル内の静的変数です。どこに問題があるのか​​本当に知りたいのですが、それは本当に奇妙です。ヘッダー ファイルのステートメントは次のとおりです。

それと同じくらい簡単ですが、ここに何か問題がありますか? 完全なコードはここで入手できますが、関連しているとは思えません。プログラムは、少なくとも「aaa」または「bbb」のいずれかを出力する必要がありますが、それは行いません。何か案が?私は本当に必死です。

0 投票する
1 に答える
1183 参照

linux - sbrk システム コールの実装が機能しないのはなぜですか?

基本原則をよりよく理解するために、非常に単純な OS を作成しようとしています。そして、ユーザー空間の malloc を実装する必要があります。そのため、最初は自分の Linux マシンで実装してテストしたいと考えています。

最初に、次の方法で sbrk() 関数を実装しました

しかし、このコードは機能しません。代わりに、os から提供された sbrk を使用すると、これで問題なく動作します。

sbrk() の別の実装を使用しようとしました

この関数から呼び出される sbrk

このコードも機能しません。行 (***) I get segmentation fault. どこに問題がありますか?

皆さんありがとう。sbrk の新しい実装を使用して問題を解決しました。指定されたコードは正常に動作します。

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

c - Linux - why is the program break pointer (brk/sbrk) different each time a program is run?

I understand that the program break is the highest virtual memory address that the Linux OS has allocated for a process, and therefore marks the highest address of the heap. You can get the address of the program break by calling sbrk( 0 ).

When I create the following trivial program, I get different results each time it's run:

For example, on my PC:

My understanding was that the heap is allocated immediately above the BSS section in virtual memory - I guess I was expecting that it would always have the same initial value for a trivial program like this. Is there some randomization or something in where the program break is initially positioned? If not, why is it different each time I run the program?

0 投票する
3 に答える
16330 参照

c - malloc() は brk() または mmap() を使用しますか?

0 投票する
1 に答える
971 参照

c - C プログラムの sbrk 関数とポインター

コード:

疑問に思う:

morecore 関数が他の関数から呼び出されていると見なし、argument(nu) から int として 4 を受け取ります。私は以下の記述に疑問を持っています。

up はヘッダーへの単なるポインターです。しかし、それでもヘッダー変数を指していません。sbrk は要求されたメモリを割り当て、現在のプログラム ブレークを返し、cp に格納されます。次に、cp に格納されているアドレスがキャストされ、up に割り当てられます。現在、up には、ヘッダー変数へのポインターとして sbrk によって返されるアドレスが含まれています。すると次の発言が出てきます。

upsbrk によって返されたアドレスのみが含まれます。次に、上記のステートメントが nu をサイズ変数に格納する方法。

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

c - mmap(2) によって返されるアドレスがヒープと衝突する可能性はありますか?

mmap(2)アドレスヒントを提供せずに を使用していくつかのページを割り当て、後でmalloc(3)/を使用してメモリを割り当てると、以前の呼び出しによって返されたアドレスにオーバーラップするか、常に保証される方法でヒープを呼び出して成長calloc(3)させる可能性がありますか?ヒープまたはスタックから遠く離れたアドレスを返すには?mallocsbrk(2)mmapmmap