C++相談室 part132

■ このスレッドは過去ログ倉庫に格納されています
2017/10/10(火) 00:11:34.01ID:nc/5PI4P0
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレにお願いします。

前スレ
C++相談室 part131
http://mevius.2ch.net/test/read.cgi/tech/1501295308/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.101【環境依存OK】
http://mevius.2ch.net/test/read.cgi/tech/1500329247/

■長いソースを貼るときはここへ。■
 http://codepad.org/
 https://ideone.com/

[C++ FAQ]
https://isocpp.org/wiki/faq/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2017/10/24(火) 22:15:38.33ID:018tmIsf0
>>205
そっちになるんですね、失礼しました、>>204は取り下げて移動します
207デフォルトの名無しさん (ワッチョイ e5b3-2TAP)
垢版 |
2017/10/25(水) 18:49:27.48ID:qOXOqU1a0
c++でダックタイピングのようなものをやりたいです。
void型で受け取ったクラスを自前で用意したインターフェースクラスにキャストして関数を呼び出すって可能ですか?
やり方や参考になるサイトなどあれば教えて欲しいです。
templateでの型消去はコンパイル段階でクラスを知らないせいで弾かれてしまっているようです……
2017/10/25(水) 19:02:03.57ID:16XMr+7o0
vfptrの実装状況によるから、未知の抽象クラスのメソッドって
呼べないと思うんだが
209デフォルトの名無しさん (ワッチョイ e5b3-2TAP)
垢版 |
2017/10/25(水) 19:20:07.39ID:qOXOqU1a0
>>208
ありがとうございます
やっぱクラスの構成わかんなきゃアクセスしようがないですよね……
exeのlibに依存せずになんとかdll開発できないかと考えてたんですが無理そうですね
諦めます
2017/10/25(水) 19:21:19.49ID:Srjg9fpL0
>>207
っinterpret_cast?
その代わり、ちゃんと素養のまともなモノを使わないとみ定義でPC死ぬからな。
2017/10/25(水) 19:28:12.28ID:Srjg9fpL0
https://msdn.microsoft.com/ja-jp/library/e0w9f63b.aspx
reinterpret_castだった。
かなり危ない。
212デフォルトの名無しさん (ワッチョイ e5b3-2TAP)
垢版 |
2017/10/25(水) 19:38:49.97ID:qOXOqU1a0
>>210
ありがとう。これだと型確認回避できるのか……希望が見えてきました
ちょっと試してみます。
213デフォルトの名無しさん (ブーイモ MM71-v1IO)
垢版 |
2017/10/25(水) 20:09:22.57ID:r5sy60NsM
おおっと、auto の話題には注意しないとな。
2017/10/25(水) 20:51:07.58ID:t7oUy/d3r
昭和生まれの老害はそろそろ引退すべき
2017/10/25(水) 20:55:21.88ID:SS3Ej639M
64年生まれの妹が不憫でならない
2017/10/25(水) 22:31:10.63ID:Nep/tIRvd
.outからsoファイル呼び出す形を作ってるのだけど
変数の共有するのってグローバル変数にするのとシングルとんみたいなの作る以外にある?
関数の引数にはできない状態だと
217デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
垢版 |
2017/10/26(木) 01:08:27.67ID:KrANDw+50
>>216
グローバル「関数」内にstatic変数なんてどう?

ちょっと範囲が狭くなるけど、スレッドローカルストレージとかも。
218デフォルトの名無しさん (ワッチョイ e983-nu9H)
垢版 |
2017/10/26(木) 01:17:12.83ID:SQPezUK20
>>200
OSや組み込み、ドライバでその書き方が広まったら認めてやるよ。

使い捨て、やっつけコードしか書かない小便垂れ小僧が。
219デフォルトの名無しさん (ワッチョイ d178-4HSd)
垢版 |
2017/10/26(木) 02:08:33.19ID:s0ODk43E0
イッツautoマーチック
2017/10/26(木) 03:38:24.52ID:H69oM85Y0
>>216
俺は何かの設定じみたものは環境変数に入れとくこともある。
言語問わず子プロセスでも使えて便利。
221デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
垢版 |
2017/10/26(木) 08:42:36.44ID:KrANDw+50
>>219
まんまやん
222デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
垢版 |
2017/10/26(木) 08:43:28.94ID:KrANDw+50
>>220
ああ、確かに環境変数も使うね。
2017/10/26(木) 14:14:49.39ID:yHns7wn+p
>>218
パッケージソフトやゲームはガン無視か
224デフォルトの名無しさん (スプッッ Sd73-Gmo/)
垢版 |
2017/10/26(木) 14:32:13.77ID:3HeaIUwTd
OSと組み込みとドライバって特権階級かなんかなの?
2017/10/26(木) 14:59:42.90ID:97gM9QaUa
>>218がその世界しか知らない(それ以外は俺にはかんけーない)ということにじゃないかな
2017/10/26(木) 16:12:23.15ID:fpqT055X0
OS内部とかドライバとか、位置によってはメモリ確保の方法変わってくるし
組み込みで動的にメモリ確保とか怖くってやってらんねーとかじゃい?
静的か自動変数にインスタンスの実体置くなら一応なんとかなるんだろうけど・・・
いや、静的だとコンストラクタがくっそ面倒か? auto とか生きてくるのって、
大抵ばかすかコンテナに要素しこたま抱える様な用途だしな
2017/10/26(木) 16:48:19.15ID:sfpBhfHr0
いやautoの議論にケチつけたつもりは無いよ(俺も滅多にauto使わんし
C++の実用される現場といえばOS、組み込み、ドライバくらいしか挙げない人が多いから釘刺したかっただけ
228デフォルトの名無しさん (ワッチョイ 917f-20SA)
垢版 |
2017/10/26(木) 17:11:31.86ID:kUEk6KjE0
auto使わないとか頭固すぎ
使えるところは全てautoだわ
2017/10/26(木) 17:59:27.25ID:obzhKUOY0
単なるシンタックスシュガーでなんのオーバーヘッドや副作用があるわけじゃ無いしな
2017/10/26(木) 18:40:54.94ID:se7vIA1E0
auto下痢症
2017/10/26(木) 18:55:08.38ID:EF3aiwNW0
autoネタ大人気だな
俺もiteratorなんかじゃ迷わずauto使うけど
ポインタすらちゃんと理解してないような奴が無闇にauto使ってるのを見るとね
2017/10/26(木) 18:57:53.27ID:KmwbyHDC0
それ以上autoの話をするのはアウトだぞ
2017/10/26(木) 19:55:30.03ID:se7vIA1E0
おぉっと
2017/10/26(木) 20:20:21.90ID:8UQnYlEC0
同じ話題ばかりで食傷気味、もう吐きそう。
…というこの書き込みも同系ネタで済まぬ。
2017/10/26(木) 22:27:19.25ID:oyaJ8gC3M
>>229
auto を単なるシンタックスシュガーと言うのもどうかと思うが
とりあえず使わないと言う選択肢はないわ
2017/10/26(木) 22:29:12.27ID:LcK6lNJBd
暇潰しに
https://github.com/katahiromz/TextCanvas
でも見て行って
2017/10/26(木) 22:31:49.27ID:6866r+hk0
嘔吐嘔吐、うるせーなぁ(´・ω・`)
238デフォルトの名無しさん (ワッチョイ 6b5b-OCcV)
垢版 |
2017/10/27(金) 04:04:41.73ID:lyx9X4ms0
>>228
同感
239デフォルトの名無しさん (ワッチョイ 93b3-FaL7)
垢版 |
2017/10/27(金) 08:02:50.09ID:O+M8u5Cb0
>>233
>>233
>>233
240デフォルトの名無しさん (スップ Sd73-Gmo/)
垢版 |
2017/10/27(金) 08:33:50.52ID:beF6mKBOd
C++使わないとか頭固すぎ
使えるところは全部C++だわ
2017/10/27(金) 08:39:18.11ID:2A0a9mBA0
単なるシンタックスシュガーでオーバーヘッドとか副作用無いしねw
2017/10/27(金) 08:39:47.11ID:2A0a9mBA0
いやテンプレートは違うか
243デフォルトの名無しさん (ワッチョイ 6b3e-gj0X)
垢版 |
2017/10/27(金) 08:41:10.57ID:Aa1jtLeH0
実は>>213は、>>233のパクリ
244デフォルトの名無しさん (ワッチョイ e983-nu9H)
垢版 |
2017/10/27(金) 09:37:02.86ID:EP/R3fy90
ID:2A0a9mBA0 ←こういう馬鹿が本当にC++使ってるとは思えない。無職だろう。
2017/10/27(金) 09:50:50.86ID:+sOx5VXfM
auto絶対使わないマンってややこしい型も、全部手で書いてるの?
ET使うときとかどうしてんだろ。
2017/10/27(金) 10:00:22.45ID:tbT2n0brd
テンプレートを除いた部分は単なるシンタックスシュガーだよ?
o->vftbl->f(o, a) と書こうが o->f(a) と書こうが何の違いもない。
テンプレートはチューリングマシンとしての計算能力があるから別だけど。
2017/10/27(金) 10:25:02.18ID:n3hllmLr0
>>245
ET使う時って評価するときか?
auto a = b + c * d;
これやるとautoの型は式テンプレートで、評価が起きないから困ったことになるぞ
(まだ評価せずに組み合わせる場合は逆にautoが便利だけど)
ET作るときや実装時は確かに型がややこしいけど、普通returnの一文で終わるから
return {うんたらかんたら};
で済むと思う

あと、ET周りの関数の宣言時をautoでやってしまうと、実装完了まで使用できないというのが足かせになると思うぞ
2017/10/27(金) 11:54:16.72ID:2++1MvhW0
auto使うのって例えば

template <class U, class V>
auto func(U& a, V& b) -> decltype(a + b);

みたいに戻り値の型が簡単に推測しにくい時に使ってるけどな
2017/10/27(金) 19:49:19.03ID:+sWf4zsJ0
auto LocalFunc = [&]() { ... };
250デフォルトの名無しさん (ブーイモ MMeb-gj0X)
垢版 |
2017/10/27(金) 22:31:31.38ID:67YjQzLBM
>>248
そのautoは型推論のautoとは違う使い方だよね。
戻値の後置宣言都合によるプレースホルダ的な。
2017/10/27(金) 22:53:59.94ID:cIkV9qHA0
同じだろう
2017/10/28(土) 01:40:27.36ID:rDr3prXm0
mapみたいな複数行にまたがるようなのを
for( auto const & r: hoge ){}
とかにまとめる用途にしか怖くて使えんな
意図しない型になってたけどたまたまコンパイルに通ってたとか
後で仕様変更とか根元の hoge 書き換え後にたまたまコンパイルに通ってたりとかで
期待したメソッドの動作にならなかったりとかされるとハマりそうで怖い
253デフォルトの名無しさん (ワッチョイ a180-aATY)
垢版 |
2017/10/28(土) 02:17:51.25ID:pC+TnRxI0
>>252
暗黙の型変換乱用しないかぎりそんな事ならんと思うが
2017/10/28(土) 08:28:41.62ID:Jnrw/MWj0
テクノロジーに善悪は無い
2017/10/28(土) 08:44:41.02ID:rDr3prXm0
>>253
暗黙の云々とかoperator=とかが怖いってだけ
それに後から読み返した時、どんな戻り値が欲しかったのかとか
autoだとわかり辛いって事がままあるし、autoはなるべくあちこちに散乱させたくない
.NET方面のvarとかも気持ち悪いったらありゃしない・・・
256デフォルトの名無しさん (スップ Sd73-0RRx)
垢版 |
2017/10/28(土) 08:56:43.01ID:JVsxHO5Xd
autoの数々の利点のほうが大きいからどの言語でも型推論は基本になってきてるな
メイヤーズも言ってるしマイクロソフトも推奨してるし
257デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
垢版 |
2017/10/28(土) 09:55:15.82ID:QoaQu2To0
autoはどのように推定されるかを理解して使うもので、
断じてバカ用のヘルパーではない
バカ自身はそれがわからないから変な杞憂に陥るってだけ
2017/10/28(土) 11:02:25.42ID:J8kLZQh+0
バカだけどIDEさんが、IDEさんさえいてくれれば大丈夫だ問題ない
2017/10/28(土) 12:14:14.53ID:BDtptoiy0
初心者はまずauto使わずにプログラミング出来るようになってからにした方がいいね
2017/10/28(土) 17:38:09.89ID:VIxhg0oq0
auto使わずにコンパイラの警告レベルを最高、警告は即エラーって設定にして
テンプレートライブラリ使ったテストプログラムを書いてみると
autoのありがた味が分かると思う。

ループの制御変数の型がえらいことになったりするからな。
いわんやイテレータをや。
2017/10/28(土) 22:00:09.12ID:Jnrw/MWj0
例えば
 Bar x;
 auto z = x;
としたときに、zはの型は必ずBarになってBarの基底クラスになったりしないの?
2017/10/28(土) 22:00:59.73ID:TWx2GtJid
>>261
インスタンスとクラスを区別せよ。
2017/10/28(土) 22:03:17.64ID:Jnrw/MWj0
Barの基底クラスがFooだとして、
実はBarはコピコンがprivateでなぜかoperator Foo()だけがpublicで定義されているかもしれない
かもしれない運転、
2017/10/28(土) 22:11:30.59ID:Jnrw/MWj0
あるいは
class Foo {
 void assign(const &Foo) { ... } // (A)
};
class Bar : public Foo {
 void assign(const &Foo) { ... } // (B)
};
Foo x1, x2;
Bar y;
auto z = x1;
z.assign(x2); // (C)
y = z;
とかなときに(C)で呼ばれるassign()はどっち?
2017/10/28(土) 22:12:10.53ID:TWx2GtJid
>>264
試せばわかる。
2017/10/28(土) 22:16:47.80ID:TWx2GtJid
参照なしのautoで代入だから、この場合は同じ型でコピーだね。メソッドは仮想関数でもないから、同じクラスのメソッドが呼ばれるはずだ。
2017/10/28(土) 22:57:04.67ID:Jnrw/MWj0
C++で起き得るBarとFooのパターン全てについてテストケースを考えるのは無理ゲーすぐる、
auto儲はどのようにして有限の人生と無限に近い(ときに想像を絶する結果をもたらす)C++の自由度との折り合いを付けているのであろうか…
2017/10/28(土) 23:02:38.36ID:TWx2GtJid
かしこいIDE使ってるなら、ビルドしたらその場でautoの型がわかるはず。スマートに行こうぜ、スマートに。
2017/10/28(土) 23:49:55.51ID:n2BUqhCar
struct S {};
using Bar = S const;
Bar x;
auto z = x;

必ずしも同じ型ではないな
270デフォルトの名無しさん (ワッチョイ a180-aATY)
垢版 |
2017/10/29(日) 01:18:54.15ID:jdBIz2nU0
>>263
それがどんな問題が起きると?
>>264
Bar使われてないじゃん
271デフォルトの名無しさん (ワッチョイ e983-nu9H)
垢版 |
2017/10/29(日) 05:32:17.05ID:0yKrkLYC0
大量のC++のコードを読み、大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。
碌にコードを読んだことがない、書かない人が文法を変えたがるのだ。

外国人の日本語入門者が「は」と「が」が難しいからautoにしろ、どっちの意味かは読む人、聞く人が考えろと言ってるうなもの。
ひらがなとカタカナを統一しろとかね。日本人ならそうは思わない。日本語を使い続けて必要な理由を知ってるから。
日本語から「が」がなくなれば不便で仕方がない。

だからauto使いは大学デビューとか言われるのだ。未だコードネイティブではないのだ。
10年使ってからautoが必要かどうか考えろ。答えは明らかだ。
272デフォルトの名無しさん (ワッチョイ 6b15-OCcV)
垢版 |
2017/10/29(日) 07:32:07.72ID:m60zTw010
> 大量のC++を書いてきた人は今更シンタックスを変えようとは思わない。

これは嘘
autoだけでなくtrailing return typeやusing aliasなど
かゆいところにやっと手が届いたシンタックス変更は大歓迎している
C++11以後に拒否反応しまくって、未だにC++98のマゾプレーを続行中の変態は
頭固すぎだ

# 自分で言うのも何だが、俺に頭固いなんて言われるのは極端すぎだ
2017/10/29(日) 07:55:51.29ID:Heo7FnD+0
>>270
藻前の呼びたかったassign()は実はFoo::assign()(基底クラスの方)だったかもしれないじゃん?
274デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 08:02:49.06ID:5nFESEae0
ところでこれからC++を始めたいのだが、純粋にC++が始めたいのではなくてc言語の代わりとして
C++を使ってみたい。多少なりともC++の方が便利だろうとおもうから。一つ二つ制約があって
ROMが256バイトしかない。RAMが8Kしかない。こういう場合に今までROM48Kバイト、RAM8K
バイトでおさまっていたプログラムをC++で移植するのは余裕だろうか? それとも便利になる分
スペースがとられてRomエリアが少なすぎるってレベルだろうか?
2017/10/29(日) 08:05:45.00ID:6IgW6Wrm0
アセンブリで書けるレベルじゃね?それ。
2017/10/29(日) 08:07:50.71ID:XRmGRjwZ0
>>271
要出典:auto使いは大学デビュー

ラムダ式を変数に入れたいときはどうやるの?
コンテナのイテレータを変数に入れたいときは型名全部書くの?
std::bindの戻り値を変数に入れたいときはどうするの?

何でもかんでもauto使うのはどうかと思うがこういう面倒なところはautoでいいんじゃね
2017/10/29(日) 08:09:27.19ID:k1qoOab2d
>>274
メモリーをけちるなら、STLとかテンプレートとか呼ばれるものはあまり使わない方がいい。
std::coutなどのストリームもダメだ。あれは遅いし、バカ食いする。
2017/10/29(日) 08:10:20.13ID:XyYI0EpP0
cでもキツいな
2017/10/29(日) 08:14:51.32ID:Heo7FnD+0
多分printf()がリンクされたら死ぬレベル
2017/10/29(日) 08:19:49.13ID:k1qoOab2d
>>274
256KBの間違いだろ?
まずは、メソッド、デストラクタ、std::stringの3つを学習してみな。便利だとわかるから。
2017/10/29(日) 08:25:23.25ID:XRmGRjwZ0
>>274
ROMは256Kの誤記だとして
RAM8Kはきついな

マイコン向けの開発環境も無償版や評価版なんてのがあるから一回試した方がいいと思う

コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな
282デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 08:51:05.52ID:5nFESEae0
ROMは256kの間違い。外部RAMは256kbある。(ただしSPIでアクセスするので遅い)
だから8kは純粋にワークとして使える。
8kのRAMがきついと思うのは何故?
C++もワークはスタックを使うと思うけど、プログラムの実行エリアとして例えばクラスインスタンスを
作るのにRAMを消費することになるんだろうか? 動的にインスタンスを作成するとそのクラスが大きいと
RAMエリア(mallocで確保してロードしたら、解放するまではRAMエリアを使う)を圧迫することになる。
ということはRAMをあまり消費しない手法ってあるんだろうか?
2017/10/29(日) 09:18:10.76ID:Heo7FnD+0
普通は処理系が要求するコード、CONSTデータ、、スタック、初期値付きデータ、BSSの各セクションを
プログラマーが明示的にリンカに指示して割り当てさせるんじゃね;;
これはCもC++も同じなのでCでのやり方を理解しているなんならC++でも同じようにやれば良い
(グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い
2017/10/29(日) 09:30:39.20ID:XRmGRjwZ0
>>282
最適化切って動作確認したり、デバッグ用のコードを仕込んだりしてると8Kは意外とすぐに使いきれてしまう
当然プログラムの規模や書き方によるところだから必ず足りないわけではないけど

C++だから足りないというわけではない
元のプログラムがCで書かれてて8Kで動いてたならまぁ大丈夫か
2017/10/29(日) 09:31:08.74ID:Heo7FnD+0
>>282
>8kのRAMがきついと思うのは何故?
全てはID:5nFESEae0が上記各セクションをROMやRAMにどのように割り付けようとしているのかにかかってゐるのだが、

仮にスタックと初期値つきデータとBSSを全部8 KBのRAMに割り付けた場合、
コード以外の全て(malloc()含む)のメモリ消費がトータルで8 KBに収まらねばならず、
メモリ不足のせいでやれることは相当にきびしくなるとおもー
286デフォルトの名無しさん (ワッチョイ e983-nu9H)
垢版 |
2017/10/29(日) 09:38:54.44ID:0yKrkLYC0
ID:XRmGRjwZ0

> RAM8Kはきついな
> コンパイラのオプションで例外と実行時型情報はOFFにするのを忘れずに
> C++のコンテナクラス(std::vectorやstd::string)はメモリ不足で使えなさそうだな

こいつレベル低すぎだろ。ド素人にもほどがある。
完全に組み込み経験なしじゃねーか。学生じゃねーのか。
2017/10/29(日) 09:49:26.98ID:6IgW6Wrm0
コンテナクラスの消費バイトは12バイト。だっけ?
2017/10/29(日) 09:56:55.29ID:Heo7FnD+0
sizeof(コンテナクラス)すればワカル、
ただしコンテナに要素の追加でmalloc()される分は別枠
2017/10/29(日) 10:05:31.40ID:NWVP0NdTH
>>274
論外 勉強目的だろ
自称プロでも 8kB なんて環境で組んだことのある人間なんて少数
普通はデフォルトのスタックサイズやvtableの存在すら知らん
考え直せ
2017/10/29(日) 10:24:19.89ID:9Q+tOYh80
Microchip マイコン PIC24FJ128GA006-I/PT 16ビット RISC PIC24FJ,
32MHz, 128 kB フラッシュ, 8 kB RAM, 64-Pin
http://jp.rs-online.com/web/p/microcontrollers/6230897/

8KB RAM は、400円のPIC マイコンとかだろ

そもそも、C++ のコンパイラが無い
291デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 10:29:34.45ID:5nFESEae0
コンパイラはありますよ。C/C++とうたってるので恐らくC++もできると思うが、、、
TIとかHewとか他にもKeilとか
292デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 10:41:22.70ID:5nFESEae0
>グローバルなオブジェクトの構築と破棄の手当てが追加になるだけぐらいしか違いが無い

おお、心強いお言葉。
例えば

class MyClass
{
int buf[1000];
int no = 0;
void inputdisp(int aa){
sprintf(buf," aa=%d",aa);
}
};
int sub1()
{
MyClass aaa;
aaa.disp(333);
return 0;
}

こういう場合はaaaはbufは2000バイトのRAMを使うけれども、stackに確保するんだろうか?
aaa自体はrom上にできると考えていい?
それなら、cと混在で徐々にC++に変えていく程度でも問題ないのかなとは思っている。
2017/10/29(日) 10:52:19.32ID:Heo7FnD+0
>>292
>aaa自体はrom上にできると考えていい?
質問の意味不明 再入力せよ
294デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 11:05:38.47ID:5nFESEae0
動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。しかしスタティックに
生成した場合は、Code部分は原理的にはRom上にも置くことができる。そういう機能があるかどうか?って質問。
2017/10/29(日) 11:08:14.46ID:Heo7FnD+0
>>294
>動的にNewを使ってインスタンスを生成した場合には、コードは必然的にRam上に置かれる。
断じて否
こういう手合いに騙されてはいけない
296デフォルトの名無しさん (ワッチョイ a180-aATY)
垢版 |
2017/10/29(日) 11:14:29.67ID:jdBIz2nU0
>>292
aaaもbufも同じ場所。大抵のコンパイラでは同じアドレスを指す。C解るならclassをstructに置き換えて考えたらいい。それと一緒。
2017/10/29(日) 11:15:45.86ID:k1qoOab2d
operator newの再定義ね。
2017/10/29(日) 11:29:26.33ID:Heo7FnD+0
ていうか>>294ハ質問者本人かしつれいorz

>>292のMyClass::inputdisp(int aa)のコードは、名前が適当にマングルされて(*1)
 void hoge(MyClass* this, int aa) // (1)
という2引数の関数としてコードセクションにコードが格納される、というのが真実(*2)(*3)
オブジェクトaaaを動的にNewを使ってインスタンスを生成しようがスタティックに生成しようが、
そんなこととは無関係に、aaa.inputdisp((int型データ))というメソッドの呼び出しは(1)の関数呼び出しにコンパイルされる

*1: ここでは簡単のため’hoge’という名前にマングルされたとしている。本当は引数の型や戻り値も情報として含む名前になるが省略
*2: C++の言語規格でそうせよ決まっているかどうかは知らないが、そう処理する処理系しか無いと思う
*3: コードセクションがROM上なのかRAM上なのかはプログラマーがコードセクションをどう割り付けたかによる
299デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 12:14:39.69ID:5nFESEae0
>296
うろ覚えで使ってるが、
Section Type of Memory Section Type of Memory
 .bss RAM
 .stack RAM
 .data RAM
 .sysmem RAM
 .text  ROM   これがコード部分
 .その他 ROM
こういうのがある。

Hewの場合#pragumaでセクションを生成できたとおもうが、一般的に#pragma とかで割り当てできるんだろうか?
今回はTiのコンパイラを使う予定なので初めての試み。
多分 
static Myclass aaa;
みたいにスタティックかなにかを冠して宣言すれば.textにコードは配置されると思うが、どうなんだろう。
スタティックなんだから原理的には配置はどうにでもなる筈。
300デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 12:18:36.34ID:5nFESEae0
問題はスタティックにした場合, コードは.textに配置されるとしてもdataが.dataに配置されると非常にまずい。
スタックでやってもらえないと困る。
2017/10/29(日) 12:34:41.62ID:n8H8yUIJM
>>300
関数が再入されることを考えたら普通にスタックに配置されると思うよ。
むしろstaticにしたらスタックには配置されない。
ここまでインスタンスの話。
コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300にとっても問題にならないかと。
2017/10/29(日) 12:40:57.57ID:oFRxn/Jf0
>>289
30年ぐらい前に ROM2KB, RAM2KB の Z80 ボード用プログラムをC言語で作ったことあるよ。
303デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 12:43:00.92ID:5nFESEae0
例えば、パネル表示をまとめたクラスのような場合にはクラスのメソッド部分が非常に大きくなる。しかもライブラリ
的に使うわけだから、階層のわりと下で使うことになる。3階層あって、2階層目くらいから同時にいくつかが
生成されてしまう可能性も高い。するとRAMエリアが直ぐにパンクする。なのでメソッドを大量に含んだライブラリ的な
働きをするクラスに関しては、.textにあってほしい。それは可能だと思うがじゃあそのクラス内でつかうバッファなどの
変数なんかが問題になる。これは動的に生成しないとクラスの使い道が非常に限られてくる。第一suba()で使っていて
subb()で使うとバッファエリアが壊れてしまう。
1.bufを持てないクラスなんて殆ど意味がない。
2.bufをスタティックにしか配置できないクラスなんて使い道がない。
3.小規模マイコンでメソッドをramに確保するなんて馬鹿げている。
これは明らかだよね。
 つまりMyclassのbuf[1000]、メソード関数()(例えば50個)をスタックと.textにそれぞれ上手く配置する工夫が
絶対に必要ってことだね。
304デフォルトの名無しさん (ワッチョイ 139d-xXVv)
垢版 |
2017/10/29(日) 12:45:06.72ID:5nFESEae0
>コードはいずれにしても.textに配置されると思うよ。特に指定がない限り。でもそれは>>300にとっても問題にならないかと。

であれば何も問題ないですね。
2017/10/29(日) 12:54:06.20ID:t3scGPtZ0
組み込みはPCで動くの違って配置も考えないといけないから大変だな

マイコンでの配置に関してはここより組み込みが普通の電電板のマイコンスレでの方が良いような気がするが。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況