[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2ch.scのread.cgiへ]
Update time : 04/20 12:41 / Filesize : 255 KB / Number-of Response : 872
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

【初心者歓迎】C/C++室 Ver.104【環境依存OK】



1 名前:デフォルトの名無しさん mailto:sage [2018/12/28(金) 06:04:52.38 ID:ufThBpcD.net]
エスケープシーケンスやWin32APIなどの環境依存なものもOK
そのような質問は必ず環境を書きましょう
半角空白やタブでのインデントはスレに貼ると無くなります

コードを貼れる所
codepad.org/
https://ideone.com/

前スレ
【初心者歓迎】C/C++室 Ver.103【環境依存OK】
https://mevius.5ch.net/test/read.cgi/tech/1530384293/

692 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 11:25:59.41 ID:1+PBsWw4.net]
>>690
マジレスすると、ああいうのはファイルに落として時々バッチ処理してるだけ
言語はだいたいFortranかC++が多いだろうね

693 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 13:12:20.46 ID:+Sk++sfs.net]
C++だけは絶対にないな

694 名前:はちみつ餃子 mailto:sage [2019/03/06(水) 13:15:53.62 ID:7/fqDaVy.net]
そうか。

695 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:36:07.84 ID:rIL6SiiZ.net]
std::chronoにnanoseconds取り扱う型があるけど
これってwindowsでもナノ秒の精度ちゃんと取り扱えるの?

696 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:39:51.80 ID:NglcYyrq.net]
c++11以降はあれ明らかに生産性下がってんだろ。。
誰か本当のことを言ってやれよ。。

697 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:41:05.32 ID:ARyk7IvZ.net]
構造化束縛はありがたい

698 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:42:11.68 ID:TjQtzcPT.net]
>>695
自分で試してみたら?

699 名前:デフォルトの名無しさん mailto:sage [2019/03/06(水) 23:52:49.64 ID:07omsi5c.net]
>>695
表現できるだけ
計測できるとは言っていない

700 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 04:25:32.55 ID:hEEon6In.net]
じっさいにやったらわかるが、結局 Windows API の持ってる精度までしかでない
あたりまえっちゃーあたりまえだが



701 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 05:42:28.93 ID:mVKClUMz.net]
>>698
試そうと思ったらどう試すのがいいんだ?

702 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 06:28:12.40 ID:beHWBAJY.net]
短時間、というか連続で何度も時刻の値を入手して、
値の下の方の桁がかならずゼロ並びになってるとか、
時刻同士の差を取って、ある値より小さな数が出ないことから、
解像度の見当を付けるくらいかな。

もっと良いやり方を知ってる人は教えてください。

703 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 09:17:09.23 ID:0XBNAuOg.net]
差をとってその偏差を見ればいいんでは
高解像度タイマーならたぶんcpuのクロック程度の解像度じゃないの
パフォーマンス測定に普通使うし
個人的にはchrono使わずにosのapiかコンパイラの組み込み関数使う
そっちの方が信頼できるし、chronoは型がガチガチすぎて面倒くさい

704 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 09:44:34.06 ID:MJ46GSxE.net]
アナログ出力してオシロで確認

705 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 19:42:23.39 ID:41TL6wBf.net]
std::vectorの最初の要素数は
std::vectro<foo> bar(12);
みたいにコンストラクタで指定できますが、同様に
std::vector<std::vectro<foo>> bar
のように入れ子になったvectorの両方の要素数をコンストラクタで指定する方法はありますか?

706 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:10:03.40 ID:rioBJ/QG.net]
結構難しいと思うがね。
最近のCPUはターボブーストいうてサボるし、命令順序入れ替えるし、キャッシュの乗り方でnano秒程度は簡単にズレるだろうし。

707 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:45:12.44 ID:xMxnKQAI.net]
>>705
std::vector<std::vector<foo>> a(100, std::vector<foo>(200));

708 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 20:50:20.24 ID:pnI3L7PU.net]
>>706
最近のは対策入ってる

709 名前:デフォルトの名無しさん mailto:sage [2019/03/07(木) 22:54:09.91 ID:qMT9Q04c.net]
>>707
ありがとござます!

710 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 07:43:53.39 ID:L5yO1DTL.net]
Cで書かれたライブラリから来た構造体にスマポをあてる方法はありますか?



711 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 09:00:25.13 ID:jz9xUaFa.net]
どうなんだろ?
普通に考えたらデストラクタでfreeを呼べばいいから、それ用のライブラリがありそうな気はするけど。

712 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 10:46:03.96 ID:ABNsWlsO.net]
>>710
スマポ弄ってアロケートだけしないようにすればいいんじゃね?

713 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 11:36:20.07 ID:4ewQpv+T.net]
「来た」というのが構造体へのポインタをfree責任ごと渡されたという意味ならカスタムデリータだろうな。

714 名前:706 mailto:sage [2019/03/09(土) 12:16:02.29 ID:L5yO1DTL.net]
ありがとうございます
カスタムデリータは知りませんでした
Cで書かれたライブラリにmallocしたポインタを返してくる関数があって生ポいやだなあと思っていたところでした

715 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 14:06:24.90 ID:YAm1zwse.net]
最近スマポ使えスマポ使えってうるさい割にはカスタムデリータ指定出来ることも知らなかったりするんだな
自分が使ってるもののリファレンスすら読んでない奴が安全性とかどの口で言ってるんだろう

716 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 15:07:55.58 ID:23Hi4jvz.net]
わかってない奴ほど、声がデガイんだよ。

717 名前:デフォルトの名無しさん [2019/03/09(土) 17:13:56.74 ID:kfZA3URW.net]
codecvt_utf8
codecvt_utf16
codecvt_utf8_utf16
こいつらの糞加減に

718 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:33:22.12 ID:anJ4ej+i.net]
最近カスタムデリータ知ったから嬉しがってる奴がいるなw

719 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 17:49:56.48 ID:23Hi4jvz.net]
>>715
すいませんね、リファレンスなんかそっちのけで、ネット情報だけで、プログラム組んでます。

720 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 19:59:53.92 ID:YAm1zwse.net]
>>718
図星だったか、すまんな
というかマウント取るための屁理屈考えてる暇あったら手動かした方がいいよ



721 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:10:27.73 ID:eJu7ZZw8.net]
図星しとか意味分からん
ひょっとして>>715 disってるのか? w

722 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:14:07.94 ID:9vZTtl18.net]
最近図星って言葉を覚えたので使いたいんだろう
察してやれ

723 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:21:16.84 ID:YAm1zwse.net]
>>715で言ったことが図星だったか?という意味なんだが
アホが多いインターネッツですね

724 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:32:45.58 ID:kU0Uws1z.net]
今度はインターネッツという言葉を覚えたのか
どんどん賢くなっていくな

725 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:39:00.33 ID:ABNsWlsO.net]
カスタムデリータごときでよくそこまでドヤれるもんだなw

726 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 20:46:58.79 ID:YAm1zwse.net]
それ俺に言ってんの?w

727 名前:デフォルトの名無しさん [2019/03/09(土) 21:23:16.03 ID:jx9iLAiD.net]
そもそもSTLの基幹部分とかJavaだろ。

728 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 21:36:18.70 ID:jz9xUaFa.net]
実際c++やるやつのほとんどの動機がマウントとりたい以上のものではない。

729 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:31:55.52 ID:u5Pk3KZw.net]
> 俺に言ってんの?
意識しまくりすぎだろw

730 名前:デフォルトの名無しさん mailto:sage [2019/03/09(土) 22:41:21.04 ID:Tm/Y9JxW.net]
大学四年かけてC++と機械学習学べば年収1000万とか本気で言ってる奴らだからな()



731 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:26:31.27 ID:QlHozVZM.net]
相談なのですが

テキスト形式のライセンスファイルへのファイルパスを渡さないと使用できないライブラリA
そのライブラリAを使用するライブラリB

私が作成しているのはライブラリBです。お客さんに使ってもらうものなんですが、「ライセンスファイルをセットで提供して適切な場所に置いて使ってもらう」という手間を省きたくてライセンスファイルをライブラリBに埋め込めないかと思案しています。
とりあえずライセンスファイルの中身をソースにベタ書きし、実行時に一時ファイルとして作成しライブラリAにそのパスを渡すことで上手くいっているのですが、もっとスマートな方法はないでしょうか?
ファイルパスを渡さないといけないので無理ですかね…

732 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 22:57:10.81 ID:9rO3q8tQ.net]
納入時にファイル一つなんか?
実体なんやねん

733 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:06:05.03 ID:zGphoT2G.net]
ライブラリAが要求するのは
ファイルシステムに認知されるファイルの形式でないといけない
だから中間ファイルに書き出して、そのファイルパスを渡すしかない


つかライセンスを埋め込んだ場合何がしかの事情で
ライセンス変更の必要が迫られた場合ライブラリBを構築しなおすことになるんだが
そういう管理でいいのけ?

734 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:06:05.25 ID:CMHDEYzk.net]
>>732
ヘッダーと共有ライブラリのセットです。

735 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:11:06.21 ID:CMHDEYzk.net]
>>733
やっぱ他にないですよね…

継続的にバージョンアップ重ねて提供してるんですが、ライブラリAについては今後も使い続けるか微妙なんでお客さんに〜のように運用してくださいってお願いするのはまだやめておきたいんですよ。
まあその面倒ごとを避けようとするスタンスが一番よくないのかもしれませんね。

736 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:14:01.28 ID:CMHDEYzk.net]
というか自分がお客さんの立場にたってみれば、「カレントディレクトリにライセンスファイル置いて使ってください」と言われたら「はいOKです」ですむ問題ですよね。
やはりちゃんとライセンスファイル提供して使ってもらうべきかと思ってきました。

737 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:20:45.86 ID:9rO3q8tQ.net]
>>734
どう配布すんのかしらんけど
共有ライブラリと同じとこに置いて固めるなり、インストーラー書くなりすれば十分やろ
たいして報われん努力やと思うわ

それよりライブラリAは何がしたいんか気になるわ
意味あんのかそれ

738 名前:デフォルトの名無しさん mailto: sage [2019/03/11(月) 23:23:05.53 ID:CMHDEYzk.net]
>>737
ライブラリAはwebAPI叩くからその時にアクセス権限チェックでライセンスファイルを使うようです。

739 名前:デフォルトの名無しさん mailto:sage [2019/03/11(月) 23:36:41.67 ID:9rO3q8tQ.net]
>>736
ロードされてる共有ライブラリのパスはとれるはずやから、
そこにライセンスファイル置いておく手はある

740 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 01:51:07.02 ID:xlgLjh5J.net]
変数と型についてなんだがメモリは2進数でデータを記録していて、それを何byteで区切って、どういう意味を持つか(正の整数のみとか)を型で決めてるんだよね?だとしたらポインタに型があるのはなぜ?どれもアドレスを示すんだからある意味int型でいいと思うんだけど



741 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 02:03:10.03 ID:tBEUjULM.net]
>>740
そういう言語もあったよ。
でも、ポインタを経由しただけで型がわからなくなるんじゃ、
型システムが意味を成さないだろう。

元と違った型としてアクセスしようとしたときに、
型情報がなけりゃコンパイラが捕捉しようもない。

それはプログラマの責任で正しく扱うってのならそれでもいいし、
実際、 C/C++ はプログラマがやりたければポインタを整数に型変換することも出来るけど、
(言語仕様としてはほとんど保証はないが。)
人類は間違うのでな。

型が合わないエラーなんてたびたび出しちゃうもんだろ。
もし型がなければそれはスルーされてわけのわからない挙動をするプログラムになるんだぞ。
そういうのはもうやめようって話。

742 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 02:06:26.71 ID:i1gu3hXZ.net]
>>740
ポインタに格納されるアドレス値は32bitとか64bitとかの整数でそれ自体は同じ型として扱えるとしても、そのポインタの指す先にある物の型が分からないと色々困るでしょ。
ポインタ型としてvoid*だけでプログラムを書こうとすればその必要性がわかるはず。
同じバイト表現だからといって同じ型で表さなければならない道理はない。用途や演算結果が異なるのだから別の型として扱うのはある意味自然なことだと思うよ。

743 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:03:19.32 ID:1t7NN+JI.net]
>>740
参照はずし、つまり*演算子で「ポインタの指す内容」を取り出すときに
そのポインタがどんなデータを指すポインタか分からないと困るでしょ。
構造体を指すポインタで p->menber とかする場合も同様。

>>742 の「void*ポインタだけ使って書いてみる」ってのは、
ポインタに型のある有り難さを実感できる良い課題だね。

744 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:35:06.24 ID:nPeHxcg9.net]
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

745 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:35:25.54 ID:nPeHxcg9.net]
Cのポインタ型はK&Rのプログラミング言語Cに書いてある通り、単なるアドレスを保持する型じゃなくて配列の仲間なのよ。
例えば
char *cp =“abc”;

*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。
その本には
(当時の)優れたプログラマたちがやってた事を言語仕様として取り込んだと、という様な事が書いてあったと思う。
ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

746 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 07:37:59.58 ID:nPeHxcg9.net]
>>745
>>745
>*(p+1)の様に書くと、ちゃんとcharサイズ分ずらしたアドレスを指してくれる。

*(cp+1)の間違い

747 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:23:28.38 ID:xHFKV8QO.net]
>>741
>>742
>>743
>>744
ヒューマンエラー防止
型のないポインタを宣言すると中身のbyte長が不明
ってことかありがとう
740のコードを見て疑問に思ったんだけど*cpは一つのアドレスしか記録できないから配列の先頭(文字a)のアドレスを記録するよね。このとき配列の長さが3だという情報はどこにあるの?(脱線するけどNULL終端も数えて長さ4?)

748 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:29:27.03 ID:i1gu3hXZ.net]
>>747
ポインタが指す先にいくつ分の領域があるか(いくつ分を参照してよいか)は記録されてないから、プログラマが自分の責任で管理するしかないよ

749 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 08:41:29.44 ID:7SPfMi3X.net]
>>747
直接長さを示す情報はどこにもないよ
だから、cの「文字列」は単なる文字の配列だけではなく、0終端が必要

>(脱線するけどNULL終端も数えて長さ4?)
その通り
(NULLはnullptrとしてのみ使ったほうがいいよ
混同してないならいいんだけどね)

750 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:29:32.99 ID:nPeHxcg9.net]
>>744
>>745
>ポインタが示す先の型とサイズやらの心配はC言語では不要だ、すげーだろ?的な。

サイズって型のサイズでした、すみません。

配列長さは
sizeof(*cp) / sizeof(型)で取ってねって書いてあったよね?



751 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:06.13 ID:u0RxZCyH.net]
\0終端が来るまで確保されていると想定して受け取り側は動作する
だから終端記号がないと色々まずい
(ので、バッファ長も指示する関数が後から増えた)

752 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:32:15.05 ID:xVickGeK.net]
便乗質問でごめんやけど

delete [] p;
この場合deleteはどうやってサイズ調べてんの?

753 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:32.91 ID:i1gu3hXZ.net]
>>750
char *cpで宣言してるならその計算じゃ配列サイズはとれないよ。

754 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:33:42.86 ID:u0RxZCyH.net]
要素数の算出は
sizeof(配列) / sizeof(配列[0]) または sizeof(配列) / sizeof(*配列)
ではなかろうか?

755 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 09:47:35.09 ID:Nd0ou12Q.net]
除算は遅いからなぁ

756 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:18:57.28 ID:u0RxZCyH.net]
コンパイル時に確定する値だから
実行時には定数として埋まってるんでないの?
(ほんとんどの環境で インタープリターはしらんw

757 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 10:22:41.05 ID:Nd0ou12Q.net]
sizeof(配列)は動的でしょう

758 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:15:07.37 ID:7lezZ5hH.net]
sizeofは演算子だから動的じゃないかな
最適化で消し飛ぶ可能性はあるのかもしれんけど

759 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:42:52.96 ID:Gedrqwi7.net]
>>752
実装依存だと思うけど、p[-1]とかに長さが書いてあったりする

760 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 12:45:54.40 ID:xHFKV8QO.net]
アンカー長くなるから省略するけど
みなさんありがとう



761 名前:デフォルトの名無しさん [2019/03/12(火) 13:32:00.51 ID:6Uu2j9Xc.net]
インクリメントするときに困る

762 名前:752 mailto:sage [2019/03/12(火) 14:52:24.67 ID:u0RxZCyH.net]
VLAのこと完全に忘れてた sizeof(配列) は動的だわ

763 名前:はちみつ餃子 mailto:sage [2019/03/12(火) 15:09:12.69 ID:tBEUjULM.net]
sizeof の結果は動的な判断が必要な場合 (いわゆる VLA) を除いて整数定数であることは保証される。

C++ には VLA は無いので sizeof が動的であるかどうかを心配する必要はないんだけど、
それは置いといて、 C++ で配列の大きさを知りたいときは std::extent の方がよくない?

764 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 15:29:35.28 ID:xWv5Y9zk.net]
>>760

>>748-759
というアンカー表示方法も、知っておいてね。

765 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 22:48:56.35 ID:SU/8eF4+.net]
昔はstd::extent持ち出したりしたが今はstd::sizeだな

766 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:05:04.16 ID:/eUnUFro.net]
uint8_t *addrb =(uint8_t *)0x00F00000;
uint16_t *addrw =(uint16_t *)0x00F00000;
*addrb = 0x10;
*addrw = 0xF0F0;

0x00F00000番地に0x10と0xF0F0を書き込むコードらしいのですが、最初の2行がよく分かりません。アドレスが4バイトなのにポインタはそれより小さくて問題ないのでしょうか。右辺のキャストは何を行っているのでしょうか。
よろしくお願いします。

767 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:29:55.31 ID:RU0tEwI6.net]
>>766
・整数だから昇格するよ
・整数即値をポインタ型に変換してるよ
ポイント先のデータは多分、バイト型だよ

マップドIO系のCPUではよく見るパターンだね

768 名前:デフォルトの名無しさん mailto:sage [2019/03/12(火) 23:37:26.58 ID:y5WX6T5u.net]
>ポインタはそれより小さくて問題ないのでしょうか。

*addrb = 0x10;
*addrw = 0xF0F0;
この文を見て上の疑問に到達したのかな?

ポインタは addrb や addrw で その変数の器の大きさはアドレスを格納できる大きさ

*addrb で アドレスにさされた先の内容を示す 内容の大きさはその型による

*addrb は uint8_t 型でおそらく1バイト (1オクテット)
*addrw は uint16_t 型でおそらく2バイト (2オクテット)

769 名前:デフォルトの名無しさん mailto:sage [2019/03/13(水) 18:31:26.55 ID:yPp5BeL1.net]
ありがとうございます。
理解できました。
そもそもアドレス自身のサイズがあるものと勘違いしてました。

770 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 06:41:14.61 ID:SGfhnH0M.net]
アドレス自身にもサイズはあるけどね。
sizeof(*addrb) == たぶん 1 (8bit)
sizeof(*addrw) == たぶん 2 (16bit)
sizeof(addrb) ... 近頃のPCでは 4 (32bitアドレス) か 8 (64bitアドレス) かのう。



771 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 12:20:30.31 ID:Yw9IVRaM.net]
メモリ消費についてききたい。
8byteのa,b,cっていう変数と、それを結合した24byteのdっていう変数をクラス内で扱いたいんだけど、素直にやると48byteメモリ消費だよね?
代わりに24byteのdと、8byte型のポインタ(4byte)3つ宣言したら36byteのメモリ消費で12byte/オブジェクトの節約になると思うんだけど、最適化したければ意識するべき?
あるいはコンパイラがその辺は上手にやってくれて最小限のメモリ消費になる?

772 名前:さまよえる蟻人間 mailto:age [2019/03/14(木) 12:26:16.05 ID:1+g2CCuw.net]
>>771
ポインタ先をチェック・確保するのにヒープメモリーと計算コストが掛かる。

773 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 13:52:59.75 ID:M+miX7Aw.net]
>>771
宣言次第ですね。
メモリ節約だとdを配列にしておくといいかなとおもいました。

774 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:39:59.26 ID:3EvgP48J.net]
>>771
それ実体の24byteが別に要るだろ…

775 名前:デフォルトの名無しさん [2019/03/14(木) 14:43:45.46 ID:q8OuUl64.net]
下のソースをコンパイルしてコマンドプロンプト(cmd)で実行すると「鷗」の字が出力されません

int main(int ac, char **av){
setlocale(LC_ALL, "");
fwprintf(stdout, L"[%c]\n", 0x3042); // [あ] と表示される
fwprintf(stdout, L"[%c]\n", 0x9dd7); // [?] と表示される
return 0;
}

同じコマンドプロンプト(同じwindowsインスタンス上)で
python3 からだと(スクリプト経由でもIDEでもどちらも)
print(f'[{0x3042:c}]') # [あ]
print(f'[{0x9dd7:c}]') # [鷗]
表示されます

setlocale(LC_CTYPE, "en_US:utf8");
にしても同じでした

python3 からだと表示出来るということは
fwprintf に問題があるということでしょうか?

776 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 14:57:23.81 ID:tsxAqnNH.net]
Windows は、Visual Studio だろ

TCHAR マクロで、sjis/Unicode を切り替える。
Windows用の環境を揃えないと、無理だろ

777 名前:デフォルトの名無しさん [2019/03/14(木) 15:10:14.13 ID:q8OuUl64.net]
UNICODE
_UNICODE
とかは定義してあります
それに[あ]の方は表示されてるので
TCHAR が char と誤認識とかめっちゃ的外れな指摘だと感じます

778 名前:デフォルトの名無しさん [2019/03/14(木) 15:25:54.72 ID:s2YvJJWc.net]
fwprintf
ワイド文字を書き込む場合、ファイルはバイナリー・モードでオープンするか、
o_ccsid または codepage パラメーターでオープンする必要があります。
これにより、ワイド文字に対して変換が発生しないことが保証されます。

779 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 17:04:07.47 ID:DMc/T5SW.net]
>>771
もしかして windows で 24bitカラーを取り扱いたい話? union で楽する

#pragma pack(push,1)
typedef union {
BYTE e[3];
struct { BYTE B, G, R; };
} BPP24_t;
#pragma pack(pop)

780 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:02:32.98 ID:wP1B/x23.net]
>>772-774 >>779
ありがとう説明不足だった
厳密にはL2フレームを実装したくて
DMAC6byte
SMAC6byte
TYPE2byte
とかを結合して送りたい。
んだが、結合用の変数を用意するとメモリ消費二倍な気がしていやだなと。
で、それぞれはポインタにして結合用の変数の0、6、8byteめを指定してやればいい気がして聞いてみた



781 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 19:26:19.44 ID:lcdumzgu.net]
>>780
プロトコルスタックでそういうデザインはよくある
nicにわたすときのdmaもそんな感じ
しかしその数バイトの処理はこだわるところじゃない

782 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:21:10.72 ID:2vbDdJqi.net]
規格で標準ライブラリ中のメソッドがconst指定されていない場合これをconst指定するのは規格違反ですか?

具体的にはuniform_int_distributionのconstなインスタンスを生成してoperator()(URNG& g)を呼び出すとMSVC(VS2017)のみ通り、gcc4.3.2とclang4.0ではコンパイルエラーになりました

N4140及びN4659を参照した限り、上記のオペレータはconst指定されていませんでした

783 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:28:14.30 ID:gIuDI0vP.net]
>>780
フレームの組み立ては迷うことなくstructでいいと思うのですがどうでしょう。ちなみにpingではは素直にstructで組み立ててあります。

784 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 20:30:26.12 ID:V4l0GHvB.net]
>>781
確かに数バイトなんだけどね
>>783
cppで書いててクラスのプライベート変数として持ってます
結合どうするかだけ悩ましい

785 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:00:14.82 ID:gIuDI0vP.net]
>>784
ああ、なるほど。structでガワ作っておいて、ペイロード書き換えてバッファに溜めていくって感じでしかやった事しかないですけどケースバイケースなんでしょうね。

786 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 21:58:48.11 ID:VY0DZD81.net]
コンソールがSJISだから無理

787 名前:デフォルトの名無しさん [2019/03/14(木) 23:31:25.66 ID:u00Rfoqy.net]
C++難しすぎねえか?
こんなの新機能を網羅してる人どんだけいるんだか・・・

788 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:39:23.56 ID:CLlwPgIu.net]
奥義を究めると尊敬されます(カモ)

789 名前:はちみつ餃子 mailto:sage [2019/03/14(木) 23:47:20.81 ID:mXS2OKIJ.net]
>>787
別に網羅せんでも使えるところだけ使えば良い。
常に新しい機能を把握しておく必要はない。
使わない方が良い機能というのは有るので、駄目な部分を把握する方が大事だと思う。
(その結果として新しい機能に行きつくこともあるけど。)

新しい機能を使わないと回りくどくなるだけだが、
駄目な機能は致命傷になる (という可能性をコンパイル時にエラーに出来ない) こともあるので。

今の C++ で nullptr でなく NULL を使う理由は全然ない、みたいなのとか。

790 名前:デフォルトの名無しさん mailto:sage [2019/03/14(木) 23:49:54.51 ID:Gk3KilXE.net]
てかコンセプトが待ち遠しい
templateの黒魔術っぷりが大幅に改善されるよね
エラーメッセージが分かりやすくなるのが大きい



791 名前:はちみつ餃子 mailto:sage [2019/03/15(金) 00:08:50.55 ID:q2a9nFaz.net]
コンセプトとモジュールは C++er の悲願って感じだからな……。
今まで土壇場での延期を繰返した経緯を考えると次も本当に入るのか
疑わしい気はするけど。

792 名前:デフォルトの名無しさん mailto:sage [2019/03/15(金) 02:19:09.67 ID:f+LcC8HT.net]
配列のアドレスが表示できません。何が悪いのでしょうか。結果はからになります。
unsigned char a[100];
cout << hex << &a[5] << endl;






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<255KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef