teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

追記の追記

2016/03/07 02:03

投稿

T.Kanno
T.Kanno

スコア915

answer CHANGED
@@ -11,6 +11,8 @@
11
11
 
12
12
  質問2
13
13
 
14
+ **どうなるかという結果についてはあっていると思いますが、理由が少し違うと思います。**
15
+
14
16
  まず、メッセージを割り当てる記憶域とタスクの状態は無関係です。
15
17
  さらに、問題なのはメッセージの本体が、関数の戻り(=スタックフレームの解放)で破壊されてしまう事だと思います。
16
18
  APIの呼び出し時に渡されたメッセージへのポインタは、API内部でコピーされるはずですので、ポインタの記憶域による制約はないと思いますよ。

1

追記

2016/03/07 02:03

投稿

T.Kanno
T.Kanno

スコア915

answer CHANGED
@@ -17,4 +17,12 @@
17
17
 
18
18
  >・メッセージを格納するポインタは静的変数(static宣言)にするのが無難である。
19
19
 
20
- 特に何のメリットもないと思います。問題は、ポインタではなくメッセージの本体が保持されるかどうかです。
20
+ 特に何のメリットもないと思います。問題は、ポインタではなくメッセージの本体が保持されるかどうかです。
21
+
22
+ ~~
23
+ >・メッセージを格納するポインタは静的変数(static宣言)にするのが無難である。
24
+
25
+ 上記を、「メッセージを格納する領域は…」と読み替えて捕捉します。
26
+
27
+ おそらく、1つのメッセージの処理が終了するまで次が動かないような、競合の発生可能性のないシステムなら static でOKで、それがシンプルで合理的な方法と思いますが、次が動いてしまったりする競合の発生する応用の場合には、素直にメモリを確保する方がバッファ管理や競合回避を考えるとよいかもしれません。
28
+