問題タブ [stack-size]

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

c - スタックサイズを増やさずに C 関数を分割する方法

組み込みシステムの設計に携わっていると、誰かが巨大な if/else-Jungle で構成され、時には複数の画面の長さにまたがる ISR を作成したレガシー コードに直面することがよくあります。今、良いプログラマーになろうとして、私が学んだパラダイムを使って関数をリファクタリングしようとしています。

そこで、関数を複数の静的サブ関数に分解します。これらのサブ関数には、わかりやすい名前が付けられ、変数がカプセル化されます。しかし、私は組み込みデバイスで作業しているので、スタックサイズとジャンプ数を考慮する必要があります (特に、頻繁に呼び出され、それ自体が他の何かによって中断される可能性のある ISR では)。

現在、ほとんどの (またはすべての) コンパイラは、関数を強制的にインライン化することができます (__always_inline が gcc で行うように)。しかし、パラメーターを渡す必要がある場合 (必ずしも最適化されるとは限りません)、パラメーターごとに数バイトであっても、スタックサイズが増加します。

私の実際の質問: C で関数を分割しているときにスタックサイズを増やさない方法はありますか?

編集: 私の質問をより明確にするために:コードの一部をインライン関数にシフトしたコードの例を次に示します。

静的スタック使用量は、インライン関数なしで 144、インライン関数ありで 160 です。

オリジナル:

インライン関数を使用:

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

javascript - エラー RangeError: setTimeout の使用時に呼び出しスタックの最大サイズを超えました

角度のあるマテリアル タブの変更が一定の時間間隔の後に発生するメソッドを実装しようとしています。JavaScript で setInterval を使用してみましたが、あまり信頼できません (タブの変更はランダムに発生します)。以下に投稿されたコードは機能しますが、数時間後にブラウザがフリーズし、コンソールに次のエラーが表示されます。

エラー RangeError: 最大呼び出しスタック サイズを超えました

次のように、setTimeout メソッドで transitionSpeed を渡してみました。

ただし、メソッドが 2 回目に呼び出されると、this.transitionSpeed は null になります。

どんな助けでも大歓迎です

編集:

コードを次のように変更しましたが、数時間後も同じエラーが発生します。

EDIT2 : タブの変更中に、TabChange イベントが呼び出されます。コード:

これは、タイムアウトのほかに呼び出される唯一のメソッドです。この投稿によると、常に呼び出される再帰的なメソッドが必要です。