問題タブ [libc]
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ライブラリ関数の実装はどこにありますか?
たとえば、strrev()関数。string.hで宣言されていることを知っているので、どのように実装されているかを知りたいと思います。では、ソースコードはどこにありますか?
OS:Windows XP SP3
IDE:Pelles C 6.50 RC3
gcc - gcc: 数学ライブラリをリンクするために -lm フラグが必要なのはなぜですか?
-lm
数学ライブラリの関数を参照するプログラムをコンパイルするために、gcc でフラグが必要であることを発見しました。time ライブラリなどの他のライブラリを含むプログラムをコンパイルするときに、なぜ明示的なリンク フラグが必要ないのか疑問に思っています。関数が呼び出されるプログラムを作成するtime()
と、リンク オプションがなくても問題なくコンパイルされます。しかし、数学ライブラリが関係するプログラムは、-lm
フラグなしでは機能しません。
誰でもこの動作の背後にある理由を説明できますか? 御時間ありがとうございます。
c - Unix上のIsBadReadPtrアナログ
UnixのIsBadReadPtrに類似した関数はありますか?IsBadReadPtrの少なくともいくつかの機能?SIGSEGV
プロセス(など)に何か悪いことが起こった場合に反応し、いくつかの情報を回復するプロシージャを作成したいと思います。ただし、ポインタをチェックして、データが破損していないことを確認し、安全にアクセスできるかどうかを確認したいと思います。そうしないと、クラッシュ処理手順自体がクラッシュし、役に立たなくなります。
助言がありますか?
embedded - カスタム ARM セットアップへの newlib の移植
これは私の最初の投稿であり、約 1 年間取り組んだりやめたりしようとしてきたことをカバーしています。
基本的には、次のように要約されます: LPC2388 (NXP の ARM7TDMI) で動作させようとしている newlib のコピーがあります。これは、arm-elf-gcc を使用する Linux ボックス上にあります。
私が持っている質問は、newlib の移植について話している多くのチュートリアルを見てきたということです。それらはすべてスタブ (exit、open、read/write、sbrk など) について話しているので、かなり良い考えを持っています。これらすべての機能を実装する方法。しかし、どこに置くべきですか?
私は、sources.redhat.com/pub/newlib/newlib-1.18.0.tar.gz から newlib ディストリビューションを入手しました。 arm) には、更新する必要があるすべてのスタブが含まれていますが、それらはすべてかなり完成した外観のコードで埋められています (これは、crt0.S なしでは機能しないようで、それ自体は私のチップでは機能しません)。
これらの関数を自分で一掃して、書き直すべきですか?それとも別の場所に書くべきですか?「アーキテクチャ」の名前で newlib/libc/sys にまったく新しいフォルダーを作成し、ターゲットを一致するように変更する必要がありますか?
このようなものをオープンソースプロジェクトとしてリリースした後、配布する際の適切なエチケットがあるかどうかも興味があります。現在、binutils、arm-elf-gcc、newlib、および gdb をダウンロードしてコンパイルするスクリプトがあります。newlib ディレクトリにあるファイルを変更する場合、スクリプトが自動適用するパッチを渡す必要がありますか? または、変更した newlib をリポジトリに追加する必要がありますか?
わざわざ読んでくれてありがとう!これに続いて、私がやっていることのより詳細な内訳があります。
私のセットアップに関する詳細情報が必要な人のために:
Uzebox プロジェクト ( http://belogic.com/uzebox/ )に大まかに基づいて、ARM ビデオゲーム コンソールを構築しています。
私はそれを理解しようとして、多くの異なるリソースから引き出してあらゆる種類のことをしてきました. ここで私の冒険の始まりについて読むことができます (sparkfun フォーラム、私が自分でそれを理解するので、誰も応答しません): forum.sparkfun.com/viewtopic.php?f=11&t=22072
私は、これらすべてに続いて、newlib の移植に関する Stackoverflow の質問を読み、さまざまなチュートリアル ( wiki.osdev.org/Porting_Newlib など) をいくつか見ましたが、どこに、誰が、何を、いつ、どのように!
linux - lseek64を_実際に_64ビットオフセットを返すようにするにはどうすればよいですか?
次にstrace:
- 20974464000==0x4E22CEC00-良い
- -500372480==0xffffffffe22cec00-悪い
(off64_t)lseek64(fd, 0, SEEK_END);
_llseekを誤って呼び出すように変更されます。
主要なdwordを切り落とすことなく、サイズが正しくなるようにするには、さらに何をすればよいですか?
glibc - libc でカーネルコードを呼び出す方法は? (Windows または Linux)
つまり、カーネルがその機能をユーザーランドアプリケーションに公開する方法です。
regex - regcompを使用した^[az]{0,20000}$regexコンパイルの恐ろしいパフォーマンス
なぜそのような正規表現のコンパイルがRAMの最大70%を占め、激しいスワッピングと平均16の負荷につながるのか疑問に思っています。
実行時間は数分のオーダーです(前にプロセスを強制終了する必要がありました)。(20,000ではなく2,000)の実行^[a-z]{0,2000}$
は約100msであり、これは私にとって非常に重要です。
これを使ってパターンをチェックすると同時に、長さもチェックします。Ï正規表現は両方にとって便利であることがわかりました。私は何か間違ったことをしていますか?
c++ - C ++:libc宣言をstd ::に強制する方法は?
そのため、C++プログラムでlibcが必要になっています。ただし、グローバル名前空間全体に散らばるというアイデアは好きではありません。理想的には、libc全体を名前空間に強制しstd::
たいので、std::memcpy
ではなく実行する必要がありmemcpy
ます。
これは可能ですか?そしてどうやって?必要に応じて、コンパイラ固有のマクロを使用します(MS VC ++10.0およびGCC4.6のみを対象としています)。
編集:私は文字通り「宣言をstdに強制する」という意味です-std::プレフィックスなしでは呼び出せないようにします。また、cstdio
ではなく、を含めていstdio.h
ます。
ありがとう!
c - 組み込みシステム用の小さな libc
ARM7 マイクロコントローラーの freertos と組み合わせて使用するための小さな libc を探しています。私は newlib を見てきましたが、私のニーズには少し複雑すぎます。Newlib はいくつかの関数 (printf() など) で malloc() を呼び出しますが、これは小さな組み込みリアルタイム システムには適していません。
私のアプリケーションに適合する、小型でポータブルなオープンソースの libc 実装を知っている人はいますか?
msvcrt - MicrosoftとGNUC/C++標準ライブラリの実装
学習ガイドとして推奨できるように、実装の観点からどちらが優れていてクリーンですか?私の見方では、Cライブラリ(C ++のものは醜いものになります)の実装を調べて、それらをいじるだけで、実際に多くのことを学ぶことができます。なぜなら、それらは設計と概念がかなり単純だからです。両方の実装を検討した人々からの偏りのない回答を期待しています。
知らなかった人のために、C /C++ライブラリのMicrosoftの実装のほとんどはデバッグ目的で利用できます。これらは、VisualStudioのインストールフォルダーの下にありVC\crt\src\
ます。例えば。VS2008の場合:(c:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src
にコピーをインストールしたと仮定しますc:\Program Files\
)。