15/08/31 18:19:04.13 NE3NvROE.net
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part118
スレリンク(tech板)
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
スレリンク(tech板)
次期規格C++1zはこちら
C++14/C++1z 20
スレリンク(tech板)
■長いソースを貼るときはここへ。■
URLリンク(codepad.org)
URLリンク(ideone.com)
2:デフォルトの名無しさん
15/08/31 18:19:24.65 NE3NvROE.net
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後死ね。
言葉が悪いな。それで教えているつもりか。
まぁヒ
3:ントぐらいにはなったな。 うむごくろう。
4:デフォルトの名無しさん
15/08/31 19:14:01.72 5EwNZntw.net
>前スレ984
throw()は無駄な処理を削減してないだろ
無駄な処理を削減したのはnoexcept
5:デフォルトの名無しさん
15/08/31 19:16:45.24 LIRnTqik.net
前スレ >>999
>「富豪的プログラミング」を洗脳的に刷り込まれたやつが書くコードが
>世の中をどんなに減速しているか、わかってからでは遅いしね
指摘してる方法も富豪的だから見当違いだぞ
6:デフォルトの名無しさん
15/08/31 19:31:48.85 5ehxqyCu.net
URLリンク(marupeke296.com)
ここのサイトにあるデータコンテナというものを実装しようと思い
std::shared_ptr<void>型にデータへのポインタを格納しようとしたのですが
データの領域を確保するときに、
datacontainer.push_back(malloc(size));
とするとnewで確保していないのでshared_ptrのdeleteが機能しませんよね?
newでサイズを指定して確保することは出来ますか?
それとも他に良い方法があるでしょうか?
7:デフォルトの名無しさん
15/08/31 19:47:09.78 7HL3lB9q.net
>std::shared_ptr<void>
リンク先は見てないけど
そのサイトはきっと糞だろ
8:デフォルトの名無しさん
15/08/31 19:59:45.08 fU5zBptm.net
普通は仮想デストラクタを持った基底クラスBを作って
std::shared_ptr<B>にして
他のオブジェクトはBから派生させる
9:デフォルトの名無しさん
15/08/31 20:08:38.97 LIRnTqik.net
>>5
読んだけどシリアライザ・デシリアライザでググった方が良いかも
10:デフォルトの名無しさん
15/08/31 20:10:42.59 LIRnTqik.net
すまん、直列化でググったほうが引っかかる
11:デフォルトの名無しさん
15/08/31 22:06:38.27 4UR705Ml.net
>>4
どうしてそう思います?
12:デフォルトの名無しさん
15/08/31 22:13:30.93 GshNEBF9.net
>>5
>newで確保していないのでshared_ptrのdeleteが機能しませんよね?
いえそんなことはありませんpush_backの実装次第です
13:デフォルトの名無しさん
15/08/31 22:17:39.10 LIRnTqik.net
>>10
どうしてって…フリーリストの処理と
無駄なメモリを確保しておくのは同じぐらい富豪的だろ
14:デフォルトの名無しさん
15/08/31 22:33:11.25 fIQY5cyk.net
20年くらい前のとある弾幕シューティングゲームは
画面に表示するタマが256個上限で固定長メモリ上にフリーリストと確保済みリストを構築していた
あんま富豪じゃない
15:デフォルトの名無しさん
15/08/31 22:34:56.89 4UR705Ml.net
>>12
どうしてですか?
std::mapの1エントリが、一体どれだけのメモリ量なのか、計算してください
まず、保持すべき整数値IDとポインタで8バイト、
木なので最低でもrightとleftが有るので+8バイト
加えてエントリはnewで確保されるので、頭に管理領域が付く
一方、std::vectorなどで配列で管理する場合、
1エントリに付きポインタ1つの容量なので、4バイト
つまり、配列をかなり無駄遣いしたとしても、配列の方がメモリ量は少ない
16:デフォルトの名無しさん
15/08/31 22:35:02.50 LIRnTqik.net
それ静的なリソースじゃなくてオブジェクトの管理だろ
17:デフォルトの名無しさん
15/08/31 22:39:37.35 LIRnTqik.net
>>14
上限が決まっていない配列は拡張の度に確保する羽目になる
速度を求めるなら、大きさはだいたい2倍ずつになる(pythonなどもそう)
はっきり言って無駄
ってかフリーリスト何処行ったんだよ…本当自分の意見は適当な野郎だな
18:デフォルトの名無しさん
15/08/31 22:48:52.48 4UR705Ml.net
>>16
配列の、その無駄よりも、mapの方が、メモリが無駄になるって>>14で計算して見せただろ
あと、フリーリストって言う名前で書いたけど、これももちろん配列だから
IDやハンドルをポインタに変換するのに、配列を使う方法は、
もっとも効率的な方法なのに、これを富豪的と言われてしまってはね
他に効率的な方法が無いのにどうしろと
もちろん、ポインタの値を生で使えば、もっとも効率的ではある
変換して無いので、今回のテーマにはそぐわないが
19:デフォルトの名無しさん
15/08/31 22:52:48.87 BMYxuVz1.net
えっ?
フリーリストって配列要素の中に前と後ろの二つのポインター持つんじゃないの?
20:デフォルトの名無しさん
15/08/31 22:55:47.52 LIRnTqik.net
>>17
「配列だから」って…あのなあ
フリーリストは文字通りリストで配列じゃないだろ
配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる
21:デフォルトの名無しさん
15/08/31 23:04:41.29 LIRnTqik.net
そして勝手に自分でリソースID割り振る前提で進めてるが、
固定の離散値の場合はどうするんだ
変換用のMapでも作るつもりか?
22:デフォルトの名無しさん
15/08/31 23:12:33.08 4UR705Ml.net
>>18
何か知らんが、フリーリスト用の配列に、開放されたリソースのIDをpushしておけばよいだけ
新規リソースにIDを割り当てる時は、フリーリストから1つ取ってきて、割り当てればよい
面倒ならフリーリストはなくても良いだろうな
この場合、IDを割り当てるたびに、先頭から空いているIDを探さなければならないが、
配列は連続したメモリ領域なので、この処理はキャッシュに乗りやすい類の処理だ
一方で、mapへの追加は、想像よりも遅いだろう
挿入箇所を探すのに、値を比較をしながら、ポインタをたどらなければならない(キャッシュに乗りにくい)
大体は赤黒木なので、バランスをとる作業も入る
毎回newが発生する
ちなみに赤黒木はこんな感じのアルゴリズム
URLリンク(www.moon.sannet.ne.jp)
23:デフォルトの名無しさん
15/08/31 23:14:33.96 4UR705Ml.net
>>19
>配列で実装はできるが、最悪管理する配列と同数の上限付きスタックになる
そういったワーストケースでも、std::mapよりもメモリ効率が良い事は>>14で計算したが
24:デフォルトの名無しさん
15/08/31 23:19:39.84 LIRnTqik.net
>>21-22
あのな、そもそも想定のリソースはポインタだぞ?
構造体ならわかるが、ポインタに速度なんて必要ないんだよ
そしてフリーリストのワーストケースはメモリに関しては4nだろ
自分で管理するコストを乗せたら余りあるぐらい無駄
しかも離散値が絡んだら全変更
お前本当都合よく話進めるな
25:デフォルトの名無しさん
15/08/31 23:27:34.44 LIRnTqik.net
画像リソースそのものじゃなく、ポインタの確保にフリーリストとか
頭おかしいわほんと
26:デフォルトの名無しさん
15/08/31 23:30:09.30 GshNEBF9.net
IDが自プログラム外で採番されることは良くあるが
それについて>>21が言及した姿を見た者はいないのであった
27:デフォルトの名無しさん
15/08/31 23:32:54.34 4UR705Ml.net
>そしてフリーリストのワーストケースはメモリに関しては4nだろ
std::mapがどれだけメモリを無駄遣いするかは、>>14で計算している
1エントリについて、最低でも2
28:0バイトは必要なので、 その言い方だと、最低でも20nになる newの管理領域次第で、もっと悪くなる >あのな、そもそも想定のリソースはポインタだぞ? >構造体ならわかるが、ポインタに速度なんて必要ないんだよ もう、なにいってるか意味不明でしょう? これが底辺C++erなのか
29:デフォルトの名無しさん
15/08/31 23:38:12.87 LIRnTqik.net
>>26
>その言い方だと、最低でも20nになる
なんで20「バイト」が「n」になるんだよ…
頭おかしすぎてもうついていけないわ俺…
30:デフォルトの名無しさん
15/08/31 23:43:50.15 LIRnTqik.net
そうそう、そんなにフリーリストが好きなら、どうぞ使って下さい
自分は別に困らないので
31:デフォルトの名無しさん
15/08/31 23:47:08.58 4UR705Ml.net
単位を書かないお前が悪いんだろ
フリーリストの最大サイズは、すべての要素が開放された時で、
n個の要素になる
1つの要素はintで4バイトだから、4nと推測したのだが
フリーリスト付きの配列で、n個格納するのに、
最大で4nの要素が必要と言う意味かね
これでもstd::mapの方がメモリ効率が悪いことには変わりないが
32:デフォルトの名無しさん
15/09/01 00:06:41.75 W5JS3HZb.net
dlmalloc
GNU Cライブラリ (glibc) の malloc は、dlmalloc を元に作られている
chunk および利用中フラグがあるため、8バイトまたは16バイトのオーバヘッドを含めたメモリ確保が必要である。
アロケートされていないchunkも他のフリーなchunkへのポインタを持つため、chunkの最小サイズは24バイトとなっている
つーわけで、std::mapの、1エントリは、上記のnewのオーバーヘッド + ID、ポインタ、left、right、などが必要なので、
相当なサイズになることが分かってもらえるだろうか
一方で、配列でする場合は、1エントリ4バイトで済む
余程の無駄遣いをしない限りは、配列の方がメモリ効率が良いし、オマケに速度も速いのだ
33:デフォルトの名無しさん
15/09/01 00:09:22.12 Ba8p7FNG.net
アルゴリズムの文脈なのにnで通じないと
相手を底辺と言うだけありますね
で、そこから離散値はどうするのかな?
さらに木構造にでもする?
34:デフォルトの名無しさん
15/09/01 00:11:53.02 Ba8p7FNG.net
>>30
なんか自己満足仕様で勝利宣言してるしこの人…
35:デフォルトの名無しさん
15/09/01 00:19:58.95 Ba8p7FNG.net
>一方で、配列でする場合は、1エントリ4バイトで済む
だからならねえって、ちょくちょく虚言吐くなあ
癖なの?
36:デフォルトの名無しさん
15/09/01 01:11:45.51 0+ju4But.net
新たなタイプの触っちゃいけない人が出てきたなあ…
37:デフォルトの名無しさん
15/09/01 01:37:17.37 Ba8p7FNG.net
実際は開放されないって事がすっぽり抜けてるのかな
…いや絶対わざと言ってるなこれ
38:デフォルトの名無しさん
15/09/01 01:52:06.05 GHEmL8/j.net
>>3
throw() でも無駄な処理が消えることあるよ。
URLリンク(goo.gl)
URLリンク(goo.gl)
39:デフォルトの名無しさん
15/09/01 02:10:03.23 fDCmPfsg.net
ワタシ思うに、両方やって、比べればいいと思う、アルよ
机上論の応酬などいくらやっても無駄
故人曰く案ずるより産むが易しってな
40:デフォルトの名無しさん
15/09/01 08:08:03.99 olKwiEx6.net
曖昧な要件にオレオレ仕様加えて俺の勝ち~
まあ、よく見る光景ですなw
41:デフォルトの名無しさん
15/09/01 08:20:35.50 p5lCrfoJ.net
>>36
消えてねーだろ
984の主語は呼び出し側じゃなくて呼ばれた方だぞ?
42:デフォルトの名無しさん
15/09/01 09:28:03.11 GHEmL8/j.net
>>39
ん?・・・リンク先見直したけどやっぱり7命令ほど削れてるよね?
主語?・・・いま974から見直してもそんなの書いてないと思うんだけど・・・見落としてたらごめんね。
43:デフォルトの名無しさん
15/09/01 12:19:42.42 CdEi71Zr.net
モデルクラスってデータ構造を持つべき?
それとも持つべきではない?
44:デフォルトの名無しさん
15/09/01 18:28:43.15 zo1v2bDs.net
>>41
まずそのモデルクラスとやらが何なのか定義を聞こうか
45:デフォルトの名無しさん
15/09/01 19:08:10.13 4KR7vAAo.net
定義を決めてもらわないと回答もできないようじゃ三流
46:デフォルトの名無しさん
15/09/01 19:30:56.55 pwoXX+fq.net
まずその三流とやらが何なのか定義を聞こうか
47:デフォルトの名無しさん
15/09/01 21:26:17.28 jc1TnNJe.net
モデルクラスってあまり聞かない言葉だね。
一般的な用語から入らないとレス付かないと思うな。
48:デフォルトの名無しさん
15/09/01 21:57:34.27 pYMkwSaE.net
造語だったりしてw
49:デフォルトの名無しさん
15/09/01 22:07:22.53 AdYeXoWK.net
昔ながらのMVC開発のモデルなら
データ構造をメンバーとして持つ感じじゃないか
最近のなんやらかんやらは知らんが
50:デフォルトの名無しさん
15/09/01 22:09:34.18 AdYeXoWK.net
つかMVCってC++でやることってあるの?
昔Javaを使ったWebの開発現場では煩い位に聞いたけど
51:デフォルトの名無しさん
15/09/01 22:14:30.02 nXuOkFi0.net
特定の文脈でしか通じない用語を
断り無しに連発するのは馬鹿の特徴
52:デフォルトの名無しさん
15/09/02 00:21:31.48 TZYcxUIB.net
チンピラの群れがお互いに喧嘩を売って歩くスレ
53:デフォルトの名無しさん
15/09/02 08:20:41.73 8HjhIrCM.net
お互い売るけど、どちらも買わない
54:デフォルトの名無しさん
15/09/02 11:40:01.60 3Er4L3kb.net
#include<iterator>
#include<fstream>
#include<iostream>
int main(){
std::ifstream f{"abc"};
std::istream_iterator<unsigned char> i{f};
for(auto a=0;a<5;++a)
std::cout<<" "<<std::hex<<static_cast<int>(*i++);
return 0;
}
このコードでabcという名前の読み込むファイルの中に16進数で0Cがあると
なぜか表示されなかったり0が2個になったりします
何がわるいのですか?
g++とclang++で試しました
55:デフォルトの名無しさん
15/09/02 11:52:12.56 3Er4L3kb.net
自己解決しました
56:デフォルトの名無しさん
15/09/02 12:00:08.37 3Er4L3kb.net
直ったと思ったら勘違いでした
教えてください
57:デフォルトの名無しさん
15/09/02 12:17:49.56 3Er4L3kb.net
こんどは直りました
ありがとうございます
58:デフォルトの名無しさん
15/09/02 12:19:48.06 kvoheval.net
どういたしまして
59:デフォルトの名無しさん
15/09/02 12:22:36.42 RN6F+W1d.net
>>54
istream_iteratorは>>演算子によって文字を読取るため、0x0cのようなホワイトスペース文字は
スキップする
こいつを読み取らせるにはバイナリ入出力を使う
#include <fstream>
#include <iostream>
#include <iomanip>
int main()
{
std::ifstream f {"abc.txt", std::ios::in | std::ios::binary};
int x;
// std::istream_iterator<unsigned char> i {f};
// for (auto a = 0; a < 5; ++a)
// std::cout << " " << std::hex << static_cast<int>(*i++);
while ((x = f.get()) != EOF) {
std::cout << " " << std::setw(2) << std::setfill('0') << std::hex << x;
}
}
60:デフォルトの名無しさん
15/09/02 12:25:51.06 3Er4L3kb.net
unsetf(std::ios::skipws)でできましたよ
61:デフォルトの名無しさん
15/09/02 12:26:31.09 RN6F+W1d.net
>>58
同じことだな
62:デフォルトの名無しさん
15/09/02 12:29:04.68 RN6F+W1d.net
他の方法としてはstd::noskipwsをその都度指定するか
URLリンク(www.cplusplus.com)
63:デフォルトの名無しさん
15/09/02 12:29:52.92 kvoheval.net
や っ ぱ ス ト リ ー ム は ク ソ だ わ
64:デフォルトの名無しさん
15/09/02 12:34:52.18 RN6F+W1d.net
慣れの問題だろ
istream_iteratorが>>演算子を内部で使ってるとちゃんと書いてある本を持ってれば分かる話
65:デフォルトの名無しさん
15/09/02 12:37:36.59 pfz+JPDH.net
>>47
ありがとう
モデルってビジネスロジック書くところだと勘違いしてた
もろにデータ構造そのものを指すんだな
66:デフォルトの名無しさん
15/09/02 13:03:07.04 spisOxh2.net
>>62はどういう意味ですか?
67:デフォルトの名無しさん
15/09/02 13:39:30.67 3Er4L3kb.net
<<を使わないために
istreambuf_iteratorを使いたいんですけど
ifstreamのrdbuf()をイテレーターの初期化にしてもできませんでした
68:デフォルトの名無しさん
15/09/02 19:01:21.83 I203tbc8.net
慣れの問題と思ってる奴はバカ
iostreamが糞なことに気づかないようではどうしようもない
69:デフォルトの名無しさん
15/09/02 20:13:37.89 +ga1UiZL.net
すいません初心者なんですけど
クラステンプレート質問させてください
例えば
templat e<class Type>
class A {
Type a;
public:
A() : Type() {};
もしくは
A(Type x = Type()) {};
}
みたいなイニシャライザやデフォルトテンプレート引数の場所に出てくる
Type() <- 括弧の中に何も入ってない
の意味を教えて下さい
本読んでも唐突に出てきてネット調べてもわからないです
両者が同じものなのか違うものかもわかんないです
70:デフォルトの名無しさん
15/09/02 20:14:35.25 +ga1UiZL.net
;の付け方グチャグチャだったけどそこはスルーしてください…
71:デフォルトの名無しさん
15/09/02 20:36:41.71 4+szYIhP.net
>>67
コンストラクタ呼び出し
72:デフォルトの名無しさん
15/09/02 20:42:45.88 ygSRnlxE.net
>>67
Type()はデフォルト初期化だよ
TypeがPODならゼロ初期化されるし、そうじゃなければデフォルトコンストラクトされる
73:デフォルトの名無しさん
15/09/02 20:45:27.50 ygSRnlxE.net
>>67には
;以外にも色々おかしいところはあるけどType()の意味は上の通り
74:デフォルトの名無しさん
15/09/02 20:54:19.65 +ga1UiZL.net
回答有難うございます
いただいた回答で意味が判りましたありがとうございます
自分で判った間違いは直しました、なんとなく気持ち悪いので
template <class Type>
class A {
Type a;
public:
A() : a(Type()) {}
もしくは
A(Type x = Type()) {}
};
そもそも初心者スレで聞くべきだったかもしれませんすいませんありがとうございます
75:デフォルトの名無しさん
15/09/02 21:52:05.05 m/gpmXab.net
なんでもいいが、俺なら
template <class Type>
class A {
private:
Type _a;
public:
A() : _a() {}
};
と書く
Typeのコンストラクタを呼ぶというより、_aをデフォルトコンストラクタで初期化しといたやでという意味で書いてるから。
>>72の書き方だとコピーコンストラクタを呼ぶことになるのでは?
76:デフォルトの名無しさん
15/09/02 22:18:06.66 HOyUHIr6.net
>>70
どうしてそう息を吸って吐くようにウソが出てくるんだ?
77:デフォルトの名無しさん
15/09/02 22:47:41.96 1DlJs2CJ.net
>>73
コンストラクタを呼んじゃいけないという
おまえの脳内前提で質問されても
78:デフォルトの名無しさん
15/09/02 23:14:30.27 ygSRnlxE.net
>>74
具体的にどうぞ
どう言えば正しいのかまで
それが出来ないならお前はクズの中のクズ
79:デフォルトの名無しさん
15/09/02 23:19:25.72 HOyUHIr6.net
>>76
規格の定義と異なる嘘を並べておいて随分と横柄な態度だな
仕様を読み間違えたとかじゃなくて知らないくせにテキトー抜かすのは
止めた方がいいぞ
80:デフォルトの名無しさん
15/09/02 23:20:58.11 ygSRnlxE.net
>>77
で?
81:デフォルトの名無しさん
15/09/02 23:34:08.05 0+j6o+Dn.net
>>78
レス止めたほうがいいってよ(´・ω・`)
82:デフォルトの名無しさん
15/09/02 23:42:02.07 urmqHodw.net
大きく出る割に話がピーマン
83:デフォルトの名無しさん
15/09/03 00:34:33.32 iQnjIkb4.net
具体的には説明できないがお前は
84:間違っている!!!
85:デフォルトの名無しさん
15/09/03 00:42:05.98 CZJfW2V/.net
>>73
>>72だとxvalueでムーブコンストラクタが呼ばれるのでは?……と思ったけど、必ずしもムーブコンストラクタが定義されてるわけではない上に、デストラクタ明示したらムーブセマンティクスも明示しないと削除されるか(推奨であって規格ではない)
86:デフォルトの名無しさん
15/09/03 00:45:59.94 SvUuACZU.net
荒れてるところ恐縮ですが質問してもいいですか?
class A {
B& b;
}
class B {
A& a;
}
こんなふうな相互に参照を持つことってできるのですか?
ポインタ使う以外に道はないですか?
87:デフォルトの名無しさん
15/09/03 00:50:37.56 fKKhgssi.net
指摘した後に勘違いと気づいたパターン
88:デフォルトの名無しさん
15/09/03 01:12:32.53 hDY8eKzg.net
>>83
class c
{
class b;
class a
{
b &b_ = *new b();
};
class b
{
a &a_ = *new a();
};
};
これで一応動くけど、どうすんのこれ
89:デフォルトの名無しさん
15/09/03 01:16:38.14 fKKhgssi.net
それ相互参照じゃない
というかムリ
90:デフォルトの名無しさん
15/09/03 02:36:12.57 VxVmaHFN.net
仮引数をstd::stringへのconst参照にしてconst char*の文字列("...")を渡す動作はC++標準ですか?
91:デフォルトの名無しさん
15/09/03 03:11:20.88 CZJfW2V/.net
標準。
プログラミング言語C++第4版の関数多重定義解決規則をみよ。
適合できない引数を暗黙変換できるならする。
そのさいに引数を1つとるコンストラクタにも入れ子式に適用される。
92:デフォルトの名無しさん
15/09/03 03:20:02.37 fKKhgssi.net
暗黙変換はされるのは1回だけだよ
93:デフォルトの名無しさん
15/09/03 04:07:13.75 SvUuACZU.net
>>85
そんな手がありましたか
でもdeleteは自分でしなきゃダメですよね
>>86
やはり、参照を使うのは無理ですよね
「相互参照」でググってもポインタを使う例ばかりですし
ありがとうです
94:デフォルトの名無しさん
15/09/03 05:34:06.26 D704J011.net
>>83
ほれ
URLリンク(ideone.com)
95:デフォルトの名無しさん
15/09/03 07:13:38.72 1aBHaasU.net
プログラミング言語C++第4版というのはISO/IEC 14882:2014のことですか?
96:デフォルトの名無しさん
15/09/03 08:22:08.15 ZCmiwbzV.net
あれやこれや言われてる>>72の正しい解答教えてくれんと僕眠れない
97:デフォルトの名無しさん
15/09/03 09:36:59.35 SPzlieDS.net
組み込みでc++を使用しているのですが、
C++の標準ライブラリのcoutや、vectorを使用したいと思っています。
そのためには何らかのドライバの役割を果たすソースが必要ではないかと考えています。
どのようにすれば使用できるようになるのでしょうか。
98:デフォルトの名無しさん
15/09/03 09:56:07.26 gfhZ4+hm.net
動作するSTLソース
99:デフォルトの名無しさん
15/09/03 10:17:18.79 PXwT0hDa.net
ソース一覧
URLリンク(www.bulldog.co.jp) ブルドックソース株式会社 東京都
URLリンク(www.kagome.co.jp) カゴメ株式会社 愛知県
URLリンク(www.otafuku.co.jp) オタフクソース株式会社 広島県
URLリンク(www.ikari-s.co.jp) イカリソース株式会社 大阪府
URLリンク(www.kikkoman.co.jp) キッコーマン株式会社 千葉県
URLリンク(www.oliversauce.com)オリバーソース株式会社 兵庫県
URLリンク(www.sky-net.or.jp) カープソース 広島県
URLリンク(www.maruki-su.com) 株式会社 川上酢店 愛知県
URLリンク(www.kozima.co.jp) 小島食品製造株式会社 愛知県
URLリンク(www.komi.co.jp) コーミ株式会社 愛知県
URLリンク(www.sankyohikari.co.jp) サンキョーヒカリ 愛知県
URLリンク(www.junmaru.co.jp) 株式会社 純正食品マルシマ 広島県
URLリンク(www.papaya-sauce.co.jp) パパヤソース本舗 大洋産業株式会社 京都府
URLリンク(www.takahashisauce.com) 高橋ソース株式会社 埼玉県
URLリンク(www.choko.co.jp) チョーコー醤油株式会社 長崎県
URLリンク(www.timelyhit.ne.jp) 阪神ソース株式会社 兵庫県
URLリンク(www.kyoto-thinking.co.jp) 京風味ソース本舗 蛇ノ目食品廣田徳七商店 京都
URLリンク(www.optic.or.jp) 有限会社 藤井ソース工場 岡山県
URLリンク(www2.neweb.ne.jp) ヒカリ食品 徳島県
URLリンク(www.hat.hi-ho.ne.jp) 下北沢ビレッジソース 丸寿食品工業株式会社 東京都
URLリンク(www.yamayashokuhin.co.jp) 山屋食品株式会社 東京都
URLリンク(brothersauce.com) ブラザーソース森彌食品工業株式会社
URLリンク(www.asahi.co.jp) 神戸地ソース物語
【関連団体】
URLリンク(www.maff.go.jp) (社)日本ソース工業会
URLリンク(www.japan-tomato.or.jp) 社団法人 全国トマト工業会
URLリンク(www.soysauce.or.jp) 日本醤油協会
100:デフォルトの名無しさん
15/09/03 10:35:36.61 Zp2ZXSAW.net
>>94
とりあえず試してみて、そのまま使えなようなら、コンパイラのマニュアルを読む。
101:デフォルトの名無しさん
15/09/03 10:57:30.22 3MKID8ns.net
>>97
__dso_handleがどうのこうのでエラーが出ます
コンパイラはg++です。
マニュアルのインデックスをざっと見てみたのですが
セクションが多すぎて該当部分がわかりませんでした
102:デフォルトの名無しさん
15/09/03 11:17:42.50 qqXcw9HH.net
組み込みでcoutなんかいるのか?
coutがすぐ使えないってことはベアメタルだよな
103:デフォルトの名無しさん
15/09/03 11:22:18.14 BYrhbrh5.net
いるかどうかは問題にしてない
104:デフォルトの名無しさん
15/09/03 11:23:37.79 SPzlieDS.net
>>99
OSでnewlibのサポートはあるのですが
C++ライブラリのサポートがないようなので何とかして使えるようにならないかと
coutは簡単にデバッグ用メッセージをコンソールに出力できたらいいなと
newlibではprintfが使用できます。
105:デフォルトの名無しさん
15/09/03 11:33:23.42 gfhZ4+hm.net
標準ライブラリとSTLは別物。
どちらもビルド済みがコンパイラと同包されてるケースが多いが。
無ければ自らビルドするなりして組み込まないと動作するわけない。
106:デフォルトの名無しさん
15/09/03 11:44:20.68 gfhZ4+hm.net
newlib STLでググった結果。
AVR 8ビットマイクロコントローラでSTLを動かす話かと。
AVR toolchain with GCC 4.8.1 and C++ STL support - Antoni Buszta
Building compiler
Building C Standard Library
Patch GCC sources
Building C++ Standard Library and other tools
URLリンク(antoni.buszta.info)
107:デフォルトの名無しさん
15/09/03 12:03:05.07 UXgFNAqG.net
最近は、8bitマイコンでも、C++が動くのか?
びっくりした
108:デフォルトの名無しさん
15/09/03 12:09:28.35 SvUuACZU.net
>>91
ありがとうございます
unionで何らかのポインタ(void*でなくてもよさげ?)をnull初期化してやれば、
参照(をメンバに持つクラス)をメンバに持つ場合でもいけるわけですね
配置newでthisを渡すというのも初めて知りました
自分にはちょっと技巧的すぎるやり方ですが、とても勉強になりました
109:デフォルトの名無しさん
15/09/03 12:16:39.79 gfhZ4+hm.net
軽量なコード、システムを選択していけばいけるんじゃないの?やったことはない。
uClibc stl でググった結果。
uClibc++ C++ library
URLリンク(cxx.uclibc.org)
Small scale C++ STL for embedded use
URLリンク(www.exactcode.com)
Embedded C++ - Wikipedia
1990年代後半、組み込み用途への適用を目指して、肥大化したC++の仕様を必要最低限のものに絞り込んだサブセットが考案された。
一般的には、Embedded C++を用いた場合、C++よりプログラムをコンパクトにできる傾向がある。
110:デフォルトの名無しさん
15/09/03 12:43:32.79 SPzlieDS.net
>>102
なるほど、iostreamは標準ライブラリでvectorはSTLになるのですね
ちなみに組み込み用(ARM)用のstdlibc++.aは存在します
その中で"objdump -C -t"してあげるとcoutのシンボルは存在しますがvectorなどは確かに見つかりませんね
>>103
どこでcoutの出力先やらメモリの動的確保の方法を指定しているのかがわからないですね
>>106
こんなのがあるんですね
111:デフォルトの名無しさん
15/09/03 12:56:42.10 hDY8eKzg.net
8-bitマイコンってメモリ空間256バイトではないよね
なにをもって8-bitなの?
112:デフォルトの名無しさん
15/09/03 13:20:30.95 gfhZ4+hm.net
STLといっても最終的にはCPUの基本命令まで翻訳されるわけで。
STLの実装・翻訳の過程で無駄がないとすると、STLを使わないものと遜色はないはず。
メモリや速度で難があるのは無駄があるだけ。
113:デフォルトの名無しさん
15/09/03 14:47:23.71 UXgFNAqG.net
>>107
coutは標準出力。
ファイル・ディスクリプタ、0:標準入力(stdin)、
1:標準出力(stdout)、2:標準エラー(stderr)
メモリの動的確保は、reallocか、
free + malloc
>>108
CPUの命令長が、8bit
114:デフォルトの名無しさん
15/09/03 16:50:12.14 rBNlqiiW.net
>>110
確かにそれは上位のレイヤーではそうなのですが
下位層を意識してみると
内部のコードを読んだことないので自分の中での理解なのですが
Linuxの場合
例えばprintfは文字列を処理してから
fd:1を引数としたwriteシステムコールで
文字列を出力しているなどしてるのかと思っています。
しかし、windowsでは別の文字列出力方法があると思います。
その環境ごとの文字列出力法の差異をどこで吸収するのか気になっています。
Newlibはおそらくwrite_r等と言う関数を定義することで環境の差異を吸収しているように見えました。
115:デフォルトの名無しさん
15/09/03 18:06:39.67 zWhDxOK5.net
std::tuple< std::tuple<std::tuple.... *,int>> *, int >
自分自身のポインターを要素に持つtupleって出来ないんですか?
116:デフォルトの名無しさん
15/09/03 18:23:10.49 hPxxKfzL.net
>>93
「Type()」はデフォルト初期化でなく値初期化
値初期化の過程でゼロ初期化されるかどうかはルールが複雑なので
ISO/IEC 14882:2014の8.5を読めとしか言えない
ただPODかどうかは関係ない
例えば
struct X {int a; protected: int b;};
はPODではないけれどゼロ初期化される
117:デフォルトの名無しさん
15/09/03 18:51:40.41 XvCyn3hF.net
JAVAといっても最終的にはCPUの基本命令まで翻訳されるわけで。
JAVAの実装・翻訳の過程で無駄がないとすると、JAVAを使わないものと遜色はないはず。
メモリや速度で難があるのは無駄があるだけ。
118:NAS6 ◆n3AmnVhjwc
15/09/03 19:17:25.38 G+oloE/W.net
>>112
template<typename T> class hoge{};
hoge<hoge<int>*> n_inst;
??????
119:片山博文MZ ◆T6xkBnTXz7B0
15/09/03 19:21:44.93 un01NHO0.net
合わせ鏡みたいなタプル?
できるわけないだろ
120:NAS6 ◆n3AmnVhjwc
15/09/03 19:27:06.77 G+oloE/W.net
template<typename T, typename U> class hoge{};
hoge<hoge<int, int>*, int> tu_inst;
意味が分からん。それとも
template<typename T> class hoge{
public:
T* m_p;
};
hoge<int> n_inst;
n_inst.m_p;//int*型
普通にこうしたいだけ?
121:NAS6 ◆n3AmnVhjwc
15/09/03 19:29:10.11 G+oloE/W.net
ていうか、論理が分からないのか、循環参照したがるんだよな
循環参照は不定なだけ
122:デフォルトの名無しさん
15/09/03 20:34:41.66 YegStso1.net
むしろ>>112の説明で何がわからないのかがわからない。
出来ないとは思うけど
123:NAS6 ◆n3AmnVhjwc
15/09/03 20:43:03.17 G+oloE/W.net
>>119
int hogeeeeeee(int i){return hogeeeeeee(i);}
void main(){hogeeeeeee(1); return;}
これが戻り値が不定にならないと思うのと同じ
124:デフォルトの名無しさん
15/09/03 20:44:02.06 fKKhgssi.net
>>91
おお、知らなかった
C++11でできるようになってたんだな
125:NAS6 ◆n3AmnVhjwc
15/09/03 20:50:29.42 G+oloE/W.net
テンプレートは動的でなく静的だからね
TempClass< float, 6 > test1; // OK
TempClass< char, items++ > test2; // Error, second parameter
// must be constant.
126:デフォルトの名無しさん
15/09/03 21:03:10.32 D704J011.net
ちょっと考えたけど使い道無さそうだわ
URLリンク(ideone.com)
127:デフォルトの名無しさん
15/09/03 21:04:11.91 yKj1FtgQ.net
#include <iostream>
#include<tuple>
using namespace std;
int main() {
using A=std::tuple<B*,int>;
using B=std::tuple<int,A*>;
return 0;
}
どうやってこのエラーを取り除けるのでしょうか?
128:デフォルトの名無しさん
15/09/03 21:08:45.94 fKKhgssi.net
>>124
それは規格に無理と書いてある
129:デフォルトの名無しさん
15/09/03 21:14:36.19 yKj1FtgQ.net
むりなんすか
ありがとうございました
130:NAS6 ◆n3AmnVhjwc
15/09/03 21:16:27.91 G+oloE/W.net
>>124
テンプレートは生成が静的だから完全解決できないと生成できません
プログラムコードも静的だから完全解決できないこういうコードはできません
int hoge(int i){return hage(i);}
int hage(int i){return hoge(i);}
void main(){int ret=hoge(1); return;}
hogeかhageかでif分岐などで解決しないと実行できません
で>>124みたいなテンプレートは↑こういう風に解釈されます
131:デフォルトの名無しさん
15/09/03 21:31:53.50 fKKhgssi.net
>>126
14.5.7
>The type-id in an alias template declaration shall not refer to
>the alias template being declared. The type produced by an alias
>template specialization shall not directly or indirectly make use of
>that specialization.
要するにテンプレートの再帰型は直接であれ間接であれ使えない
132:NAS6 ◆n3AmnVhjwc
15/09/03 21:47:39.21 G+oloE/W.net
どういうのがやりたいのかわからんけど、↓でそれの何ができないの?
class base{
public:
base(base& n){m_p=&n;}
base* m_p;
};
class A : public base{
public:
A(A& n) : base(n){;}
};
class B : public base{
public:
B(B& n) : base(n){;}
};
133:デフォルトの名無しさん
15/09/03 22:00:58.39 ujbBBsKz.net
コテハン=キチ○イ の法則
134:NAS6 ◆n3AmnVhjwc
15/09/03 22:06:39.08 G+oloE/W.net
>>129
でA←→Bの相互通信がしたいなら
messengerクラスを独立に作ればいいだけ
135:NAS6 ◆n3AmnVhjwc
15/09/03 22:09:18.49 G+oloE/W.net
base* m_p;
つかこれはthisポインタだな
136:NAS6 ◆n3AmnVhjwc
15/09/03 22:12:34.19 G+oloE/W.net
要するにクラス参照の持ち合いなんて
baseクラスからAとBを派生させて
独立なメッセージクラスで通信すりゃあいいんだよ
137:NAS6 ◆n3AmnVhjwc
15/09/03 22:19:52.99 G+oloE/W.net
abstract factoryパターンだろ
138:デフォルトの名無しさん
15/09/03 22:22:17.51 hvDmk3I7.net
この馬鹿はさっきから何言ってるの?
ビョーキなの?
139:NAS6 ◆n3AmnVhjwc
15/09/03 22:39:04.34 G+oloE/W.net
要するにAとBのクラス参照の持ち合いなんて
baseクラスからAとBを派生させて
独立なメッセージクラスで通信すりゃあいいんだよ
デザインパターンではabstract factoryパターンだろ
そのまんまだよ
140:デフォルトの名無しさん
15/09/03 23:14:36.34 fKKhgssi.net
なんのこっちゃ
141:デフォルトの名無しさん
15/09/03 23:18:52.70 yR6wfki7.net
1) 釣りである
2) 知ったかしなきゃ死ぬ病気である
3) 本屋にくるおしゃべり天使みたいにスレでもうわごとレスを止められない
4) 本人はまじめだが知能がいちじるしく低い
142:NAS6 ◆n3AmnVhjwc
15/09/03 23:24:43.23 G+oloE/W.net
class base{
public:
int m_val;
base(int i):m_val(i){;}
virtual int func(int i){return i;}
};
class add:public base{
public:
int func(int i){return m_val+i;}
};
class sub:public base{
public:
int func(int i){return m_val-i;}
};
base *p,*q;//abstract factoryパターン
int r;//メッセージクラス
p=new add(21); r=p->func(7);
q=new sub(r); r=q->func(7);
143:NAS6 ◆n3AmnVhjwc
15/09/03 23:34:56.29 G+oloE/W.net
class base{
public:
int m_val;
base(int i=0):m_val(i){;}
virtual int func(int i=0){return i;}
};
class add:public base{
public:
int func(int i=0){return m_val+i;}
};
class sub:public base{
public:
int func(int i=0){return m_val-i;}
};
base *p,*q;//abstract factoryパターン
int r;//メッセージクラス
p=new add(21); r=p->func(7);
q=new sub(r); r=q->func(7);
intを任意のクラスにしたらなんか色々出来そうだろ
144:NAS6 ◆n3AmnVhjwc
15/09/03 23:41:00.21 G+oloE/W.net
ありゃ、コンストラクタ忘れた
class base{
public:
int m_val;
base(int& i=0):m_val(i){;}
virtual int func(int i=0){return i;}
};
class add:public base{
public:
add(int& i=0):base(i){;}
int func(int i=0){return m_val+i;}
};
class sub:public base{
public:
sub(int& i=0):base(i){;}
int func(int i=0){return m_val-i;}
};
base *p,*q;//abstract factoryパターン
int r;//メッセージクラス
p=new add(21); r=p->func(7);
q=new sub(r); r=q->func(7);
intを任意のクラスにしたらなんか色々出来そうだろ
145:デフォルトの名無しさん
15/09/03 23:56:33.17 fKKhgssi.net
薬飲んだらすぐ寝ないと駄目だぞ
146:デフォルトの名無しさん
15/09/04 00:38:45.05 ye/5uETN.net
>>112
これでどう?
#include <tuple>
struct S;
typedef std::tuple<S> TS;
struct S { TS* p; };
TS loop{S{&loop}};
147:デフォルトの名無しさん
15/09/04 00:53:27.48 ye/5uETN.net
>>83
なんか変な回答ついてるけど、ふつうに↓でコンパイル通るよ。
class B;
class A {
B& b;
};
class B {
A& a;
};
148:デフォルトの名無しさん
15/09/04 01:15:43.42 IG+8/rPl.net
循環【参照】か
149:NAS6 ◆n3AmnVhjwc
15/09/04 01:16:03.14 tzKKrHnI.net
>>144
それだと、どちらかを先に完全確定する必要があるんだけど
まぁ、とりあえずデフォルトコンストラクタでもいいけど
実体作った後でもいいけど、A,Bはどんな状態遷移すると思う?
class B;
class A {
int m_val;
B& m_b;
A(){;}
A(B& b):m_b(b){;}
};
class B {
int m_val;
A& m_a;
B(){;}
B(A& a):m_a(a){;}
};
A a();
B b(a);
a.m_b=b;
これで、マルチスレッド環境だったりしたら、かわいそうなことに・・・
150:デフォルトの名無しさん
15/09/04 01:27:40.32 1ELVgZ8Y.net
>>144
相互に参照を持つように初期化したいという意図だろうから
それじゃ回答になっていないし、他の人が既に回答済み
151:NAS6 ◆n3AmnVhjwc
15/09/04 01:28:13.61 tzKKrHnI.net
志村Kんの志村、後ろ、後ろ、状態
152:NAS6 ◆n3AmnVhjwc
15/09/04 01:36:42.35 tzKKrHnI.net
循環参照する必要があるなら
アブストラクトファクトリパターンで
シングルトンパターンのメッセージクラスで
応答になるんだろ
153:デフォルトの名無しさん
15/09/04 01:41:27.56 ye/5uETN.net
>>146-147
そういうことか。ありがとう。
いちおう↓こんなのはできるけど、これが望むものなのかどうかはやっぱりわかんないね。
class B;
struct A {
B& b;
};
struct B {
A& a;
};
struct Loop { A a; B b; } loop = {{loop.b}, {loop.a}};
154:デフォルトの名無しさん
15/09/04 01:46:02.11 ye/5uETN.net
>150 よりこっちのがいいかな。
struct Loop { A a{b}; B b{a}; } loop;
155:デフォルトの名無しさん
15/09/04 02:03:19.63 1ELVgZ8Y.net
それならc++03でもいけるね
コンストラクタ書く必要はあるけど
156:デフォルトの名無しさん
15/09/04 03:33:33.23 CNzc1DB/.net
>>150
AもBも他のクラスのメンバとするならば、初期化で問題なくインスタンス化できるという話ですか?
いずれにしろAとBをマネージするクラスを作るのは避けられないですかね?
>>152
どちらもgccのc++03でいけましたが、>>151はc++03だと警告が出ました
コンストラクタは書かなくても大丈夫ではないですか?
157:デフォルトの名無しさん
15/09/04 04:59:59.47 ukgXeb3f.net
>>153
どっちも参照しかもって無いんだから誰かが実体持つ必要があるだろ。
それは相互に参照してようがしてまいが変わらない
158:デフォルトの名無しさん
15/09/04 05:04:41.54 1ELVgZ8Y.net
>>153
C++03でクラス化するにはコンストラクタがいるよ
それと試しにg++(gcc)でやってみたけど、
C++11でのみ有効な機能っていう警告が出たよ
それじゃなかった?
159:デフォルトの名無しさん
15/09/04 06:17:53.16 rG9hvPUX.net
>>101
コンソールに出力すると
コンソールの通信速度に引っ張られて
プログラムの動作が遅くなる
デバッグだからと言って無闇に大量に出力しないように気をつけないといけない
160:デフォルトの名無しさん
15/09/04 08:17:29.72 9mN0gzGK.net
余計なお世話だ
161:デフォルトの名無しさん
15/09/04 08:58:14.87 voaTutYw.net
コンソールってバッファリングしてないのか?
162:デフォルトの名無しさん
15/09/04 11:55:39.86 1AVS2Ktf.net
>>156
言うだけ無駄
どーしてもcoutと手段が目的化してる
163:デフォルトの名無しさん
15/09/04 12:28:24.29 s9W6t8fF.net
やぱログに吐いた方がいいって事ですか
164:デフォルトの名無しさん
15/09/04 12:30:58.91 8nJVYQKk.net
>>154
mainとかの関数内ではAやBのインスタンス作れないですよね?
何かしら方法あるのかな
165:デフォルトの名無しさん
15/09/04 12:37:05.16 g9gAlQ8r.net
>>161
普通に作れるでしょ…
166:デフォルトの名無しさん
15/09/04 14:48:15.68 yKUUH6cx.net
どうでもいいけどcerrじゃ
167:デフォルトの名無しさん
15/09/04 17:07:42.09 ynK+SMBx.net
>>156
>>158
リングバッファに貯めて別タスクでワイヤレスのコンソールに吐き出させています
>>160
確かにそうかもしれません。
主目的は、標準ライブラリの移植です。
>>163
それでもかまいませんが
やらなくてはならないことは同じではないかと思いました。
ちなみにiostreamをヘッダファイルに加えると以下のようなエラーが出ます
hoge.cpp:(.text.startup+0x48): undefined reference to `__dso_handle'
/path/to/libstdc++.a(system_error.o): In function `_GLOBAL__sub_I__ZNSt14error_categoryC2Ev':
system_error.cc:(.text.startup._GLOBAL__sub_I__ZNSt14error_categoryC2Ev+0x4c): undefined reference to `__dso_handle'
168:デフォルトの名無しさん
15/09/04 20:19:10.44 STCOa/Lw.net
STLをビルドして組み込め。実装はただひとつでなくいくつもある。動作するやつで。
169:デフォルトの名無しさん
15/09/05 18:20:35.46 pkvC4koK.net
URLリンク(erosuga1.blog.fc2.com)
親戚のエロお姉さんとS◯Xwwwwwwwwwww
170:デフォルトの名無しさん
15/09/06 23:13:13.97 kzoJkPUN.net
CのCHAR_BITに当たるものはC++だとなんですか
171:デフォルトの名無しさん
15/09/06 23:59:11.69 TtEkoNQG.net
>>167 CHAR_BIT かな。
173:デフォルトの名無しさん
15/09/07 19:34:51.82 XjY9JrjD.net
nextとhasNextはnextを実装するときコピーが必要だが終端がわかっていればnextだけで進める
moveNextとcurrentはcurrentを実装するときコピーはいらないが進むのにmoveNextが必要という
トレードオフがあると思いませんか?
174:デフォルトの名無しさん
15/09/07 20:08:22.86 AAyuiqtl.net
奇遇だな
ちょうど俺もそう思っていたところだ
175:デフォルトの名無しさん
15/09/07 21:24:45.26 107fD43G.net
え!?俺も昨日同じこと考えたとこだった!
176:デフォルトの名無しさん
15/09/07 21:26:55.88 xAuYi2fm.net
ちょっと>>169が何言ってるかわからない
177:デフォルトの名無しさん
15/09/08 10:01:21.06 LEkrsXyv.net
typelistの代わりにtuple使ってるんだけどなんかダサいから
typelistの可変引数版みたいなのを自作しようと思います
178:デフォルトの名無しさん
15/09/08 12:57:45.86 rdzMyuc+.net
俺も俺も
179:デフォルトの名無しさん
15/09/10 14:29:57.70 vNCRKT6f.net
unique_ptrで配列を使う場合、テンプレート引数はどうするんでしょうか?
unique_ptr<int> p(new int[3]);
unique_ptr<int[]> p(new int[3]);
はどちらもGNU C++11でコンパイルが通りますが、両者は同じですか?
180:デフォルトの名無しさん
15/09/10 17:14:13.20 tn/zLcPl.net
>>175
前者は消滅時に変なdeleteが呼ばれるんじゃね
181:デフォルトの名無しさん
15/09/10 18:13:22.19 vNCRKT6f.net
>>176
share_ptrの場合<int[]>だとコンパイルエラーになりますが、
unique_ptrは配列の特殊化があるので<int[]>にしないとダメということでしょうか?
182:デフォルトの名無しさん
15/09/10 18:33:57.55 jMDA+bxl.net
はい
183:デフォルトの名無しさん
15/09/10 19:52:32.49 Ubq2dser.net
shared_ptrってなんで配列の特殊化が用意されてないんだろうね
代わりにshared_arrayがあったと思うけど、要するに生配列なんてクソなものは使うなよってことなのかね
184:デフォルトの名無しさん
15/09/10 20:18:56.37 dU3rTPO3.net
>shared_array
いえそんなものありません
185:デフォルトの名無しさん
15/09/10 20:26:28.15 2c1W3PII.net
shared_ptr<array<int,3>>で
186:デフォルトの名無しさん
15/09/10 20:42:53.70 XPHYFe1B.net
unique_ptr<T[]>は知的興味でしかないだろうな
なぜなならアーレイやベクトルやストリングがあるからさ
そんな僕でもこれらデータ構造よりもunique_ptr<T[]>が使えると思いつく場面はあるんだ
それはヒープ配列の生のポインターをAPIで所有権をうけとるときたった一つさ
187:デフォルトの名無しさん
15/09/10 23:41:24.04 Lt3YsJ/Z.net
> アーレイ
和服の彼女かとおもた
188:デフォルトの名無しさん
15/09/11 10:32:13.74 yGFUVtFx.net
そういえばshare_ptrの参照カウンタって
実際の情報はどこで保持されてるんでしょうか?
189:デフォルトの名無しさん
15/09/11 10:33:39.57 H6P2Jlk5.net
ソース見ればいい
190:デフォルトの名無しさん
15/09/11 11:22:30.30 Ra3TP7iE.net
ソースみれば分かるが動的に確保しているよ
ただし高速化の工夫はしてある
191:デフォルトの名無しさん
15/09/11 14:11:15.39 yGFUVtFx.net
share_ptrのソース見ましたが、atomic型を使って
うまいことやってるというくらいしか分かりませんでした
atomicについて知らなかったので調べたんですが、
これってC++11のメモリモデルに関するもので、
いわば言語のコアの機能なんですね
192:デフォルトの名無しさん
15/09/11 14:12:30.08 yGFUVtFx.net
つまりC++11以前やCではこのshare_ptrを直接実装する方法はなく、
たとえば参照カウンタを持つクラスを用意し、これをshare_ptrさせたい
クラスに継承させるという間接的な方法しかないということですよね?
193:デフォルトの名無しさん
15/09/11 14:20:50.61 ZeO2NzYz.net
んなわけねーだろ
194:デフォルトの名無しさん
15/09/11 15:00:10.29 xy/6VGnh.net
C++11で、型推論autoを使って楽をしようと思ったんだが、
2つの変数の型を自動的に整合させる方法が分からないのだ。
void some_job() {
const auto loop_times = 10;
for (auto cnt = 0; cnt != loop_times; ++cnt) {
/* ループ内の処理 */
}
} // (インデントはおそらく破壊される)
上の場合、ループ回数 loop_times と、ループカウンタ cnt は
どちらのautoもintと判断されるのでとりあえず一致する。
しかし auto loop_times の初期値にintでない値を与えると
当然ながら loop_times と cnt の型が違ってしまう。
「cntの型は、loop_timesの型からconstを外したものだよ」
という変数宣言の書き方はないだろうか?
諸兄らの教えを乞いたい。
195:デフォルトの名無しさん
15/09/11 15:18:09.86 yGFUVtFx.net
>>189
どのへんが間違ってるんですか?
C++初心者にもわかる説明だとありがたいです
196:デフォルトの名無しさん
15/09/11 15:43:03.84 BdWqvAgc.net
>>190
URLリンク(ideone.com)
これでどうよ
>>191
boost::shared_ptrのソースでも見てみれば
shared_ptrが標準に入ったのは11からだけどそれ以前にもshared_ptrはあったんだから
197:190
15/09/11 18:00:12.76 xy/6VGnh.net
>>192
まさに希望した通りの情報です。感謝します。
std::remove_const 云々 と書くのか。
sizeof() と typeid().name() とで並べて見たところ
loop_times と cnt の型は一致した。
loop_times = 10U; や loop_times = '3'; でも
試したら自動的に型が合った。
テンプレート構造体に閉じ込めたtypedefか。
こんな仕掛けを思いつくとは尊敬すべき変態さん達だな。
198:デフォルトの名無しさん
15/09/11 19:32:57.26 eMWeHauN.net
これって
const auto && loop_times = 10;
でも動くんか?
そこはdecayじゃないのかって思ったんだけど
199:デフォルトの名無しさん
15/09/11 21:03:06.98 yGFUVtFx.net
>>192
よく見てみたら、参照カウンタ自体の仕組みはごく単純で、自分のイメージ通りでした
というか、そもそも自分がshare_ptrの使い方をちゃんと理解していませんでした
share_ptrに生ポインタ渡せるのは初回だけなんですね・・・
URLリンク(ideone.com)
スレ汚し失礼しました
200:デフォルトの名無しさん
15/09/11 23:54:45.84 b8iFLD3f.net
コーディング言語は「オープンソース」が制す:Github人気調査結果 ≪ WIRED.jp
URLリンク(wired.jp)
URLリンク(wired.jp)
201:デフォルトの名無しさん
15/09/12 01:27:55.77 JUZlHW5G.net
Rubyがそんなに上位だと思えないけどなぁ
202:デフォルトの名無しさん
15/09/12 02:10:12.94 xJrAsa7q.net
ま、どうせcssとか入ってくる調査だし
でも混ぜこぜでもcssに負けてんのはちょっと面白い
203:デフォルトの名無しさん
15/09/12 04:58:03.64 oXtx5tH/.net
HTMLとJavaScriptとCSSのみっつが順位を競う
プログラミング言語ランキングとは
サイトの名前をwiredからweirdに変えた方がいい
204:デフォルトの名無しさん
15/09/12 13:10:32.88 JUZlHW5G.net
だよねぇ。おかしいよねぇ。
なんだかんだCは上位にいると思う。
205:デフォルトの名無しさん
15/09/12 13:17:01.58 VGFicEEt.net
9位は十分上位だろう
githubはもともとスクリプト書いてる人が多く使ってたから
ああいう順位なんだと思うよ
206:デフォルトの名無しさん
15/09/12 14:01:59.69 kwHtj/5N.net
マルチスレッドとグローバル変数の寿命に関する質問なのですが
detachしたスレッドが,メインスレッド終了後も生き続けてもグローバル変数にアクセスしても問題はありませんか?
StackOverflowなどには大丈夫だという回答があり、簡単なテストコードでも問題は無かったのですが
クラス内static変数にアクセスしたときに時々異常終了したことがあったので少し不安です
207:デフォルトの名無しさん
15/09/12 14:06:47.33 JUZlHW5G.net
便乗質問 メインスレッドを終了してもコスレッドは生きてるんでしたけ? まずそこから・・・
208:デフォルトの名無しさん
15/09/12 14:06:59.24 5QpLz49+.net
問題あるだろ
209:デフォルトの名無しさん
15/09/12 14:37:23.35 kwHtj/5N.net
>>203
生きてないですね(核爆
210:デフォルトの名無しさん
15/09/12 15:31:31.26 Jf5oAWRg.net
コンストラクタ() = delete;
これってなんですか
211:デフォルトの名無しさん
15/09/12 15:52:40.95 uQU/vJQH.net
cppreference.comでは以下のように説明されている
>Inhibiting the automatic generation of a default constructor by the compiler.
212:デフォルトの名無しさん
15/09/12 16:38:30.48 Jf5oAWRg.net
コンストラクタを書かないのとどう違うのですか?
213:デフォルトの名無しさん
15/09/12 16:40:31.69 pEVoCQGH.net
書かないと自動生成されるだろ
214:デフォルトの名無しさん
15/09/12 16:41:18.68 9veCOfSe.net
コンストラクタ書かなきゃいけなくなる
215:デフォルトの名無しさん
15/09/12 16:41:52.46 9veCOfSe.net
デフォルト以外の
216:デフォルトの名無しさん
15/09/12 16:43:08.92 Hpj3Z5wB.net
ビッグ4の法則はコンストラクターには成り立たないからな
217:デフォルトの名無しさん
15/09/12 18:04:37.15 fhFqy1Q7.net
見たとおりコンストラクターが定義される
ただし使うとコンパイルエラーになる特別な本体で
定義されるので書かなかったときの自動生成は行われないし
privateで書いて生成禁止にしてもfriendからアクセス出来てしまうという誤りを防げる
218:デフォルトの名無しさん
15/09/12 21:36:31.32 XAqQ9sMD.net
素直に単純に
コンパイラのコンストラクタの自動生成を阻止する
とせずに
使えない特殊なコンストラクタを定義
↓
コンストラクタがあるので自動生成されない
という回りくどいプロセスを踏んでいるのは何故ですか?
219:デフォルトの名無しさん
15/09/12 21:46:02.85 mqPDPmPF.net
>>214
どっちが回りくどいかもう一度考えてみたら?
220:デフォルトの名無しさん
15/09/12 21:48:41.33 urgaTojg.net
>>213の二段落目二行目のためでは
221:デフォルトの名無しさん
15/09/12 22:39:51.40 fhFqy1Q7.net
>>214
そりゃ>>207のサイトが嘘つきなだけで
自動生成を抑止するためじゃなく
使えない関数を定義することが目的だからね
URLリンク(ideone.com)
222:デフォルトの名無しさん
15/09/13 01:24:33.20 T9Cd4+Hx.net
目的は書く人次第だが
223:デフォルトの名無しさん
15/09/13 01:28:55.66 Auzbsz6v.net
つまり>>207も>>217も目的を決めつけた嘘つきってことですね
224:デフォルトの名無しさん
15/09/13 02:17:23.86 T9Cd4+Hx.net
どうでもいい
225:デフォルトの名無しさん
15/09/13 03:41:04.36 6aqKmbgS.net
使えない関数を定義しているのではなく、そのシグネチャの関数がdeletedであることを宣言しているのだろう。
適用されるのは同じ翻訳単位だけなのでは?
226:デフォルトの名無しさん
15/09/13 04:33:23.08 fzKWBIn4.net
>>221
そのレスする意味ある?
227:デフォルトの名無しさん
15/09/13 05:08:08.47 6aqKmbgS.net
>>213みたいな無駄にややこしい上に誤った説明をそのままにしておくのは無責任なのでは?
228:デフォルトの名無しさん
15/09/13 05:42:13.47 fzKWBIn4.net
そうじゃなくて、そのレス何も説明してないでしょ
他人を批判する前に自分を省みろって
229:デフォルトの名無しさん
15/09/13 06:21:11.66 oxWskyTT.net
>>221
deleteが同じ翻訳しか適用されなくても
delete関数はインライン関数だから
違う翻訳単位でdeleteじゃかったらODR違反
問題ない
230:デフォルトの名無しさん
15/09/13 08:36:35.77 GRWOhyHT.net
std::queue<T>についてなんですが
clear()メソッドが無いのは何か理由有り?
一応pop()がデータを返さなくてfront()で先頭要素にアクセスしてからpop()すべき仕様なのは
極力先頭要素のコピーをしたくなくて、参照で済ませたいからだと推測できるのですが
clear()が無い理由はちょっと…
231:デフォルトの名無しさん
15/09/13 08:40:43.87 1aU/2qC8.net
>>226
データ構造上、コンテナを使い回すメリットがないから
新たにインスタンス作ればよろしいということ
232:デフォルトの名無しさん
15/09/13 08:43:14.92 m2o7J/Xt.net
>>226
まーたその話かよ
コンテナアダプタだからって結論が出ただろ
233:デフォルトの名無しさん
15/09/13 13:19:52.29 BGQqu8BA.net
clearが欲しいなら黙ってstd::dequeを使えばいいだけ
FIFOを使う場合にclearが必要になるのがおかしい
234:デフォルトの名無しさん
15/09/13 13:59:21.40 21SWVEBe.net
>FIFOを使う場合にclearが必要になるのがおかしい
へー、どうして?
FIFOを乱す順序の操作ではないよね?
235:デフォルトの名無しさん
15/09/13 15:45:14.55 zCQU/fdL.net
>>226
clearしたければclearする派生クラスを作ればいい
そういう設計だ
236:デフォルトの名無しさん
15/09/13 17:42:34.20 aPjNmwB2.net
>>226
>極力先頭要素のコピーをしたくなくて
pop()が要素を返す場合コピーコンストラクタが例外を投げる可能性があるので
例外安全を満たすことができなくなる。
237:デフォルトの名無しさん
15/09/13 17:59:22.43 dMwVjMJU.net
>例外安全を満たすことができなくなる
へー、どうして?
238:デフォルトの名無しさん
15/09/13 18:45:49.56 ABWGqgkn.net
popでデータを返さないのはコピー時に例外発生したときにコンテナの中身から取り除かれるわpopした中身受け取れないわになるのを防ぐためってのもある
あとtopで参照返すことによりswapなどを使う事により例外発生させることなく受け取ることが可能になる
C++11からmove出来るようになったからほぼいらなくなったけど
239:デフォルトの名無しさん
15/09/13 20:20:56.97 M0wiS1Aa.net
平面を二次元配列で表す時
array[width][height]
array[height][width]
どっちがいいですか?
240:デフォルトの名無しさん
15/09/13 20:22:35.56 G58MCBrj.net
>>236
そんなことはお前のやろうとしていること次第。
ここできくことじゃない。
241:片山博文MZ ◆T6xkBnTXz7B0
15/09/13 20:25:57.90 io0Trfl5.net
>>235
横向きに連続してアクセスするなら
array[height][width]
がいい。まあ、その辺はインライン関数で抽象化して、実測すればわかる。
242:デフォルトの名無しさん
15/09/13 21:21:42.16 M3GBYhkY.net
速度の差異を知りたいって事か。
変わるんすかねぇ
243:デフォルトの名無しさん
15/09/13 22:47:56.80 q3JnkdTU.net
何故かわらないと思うんですか?
244:デフォルトの名無しさん
15/09/13 23:01:44.40 JxlRVXLx.net
無礼な奴だな
まず変わると考える根拠を述べよ
245:デフォルトの名無しさん
15/09/13 23:26:04.26 q3JnkdTU.net
変わらないと思う理由が知りたかっただけです
ここ、C++スレですよね
246:片山博文MZ ◆T6xkBnTXz7B0
15/09/13 23:55:37.85 io0Trfl5.net
array[height]は、width個の横に連続したデータになるから、
横方向に連続したアクセスなら、早くなるはず。
先読みとかキャッシュも関係するかも。
247:デフォルトの名無しさん
15/09/13 23:57:05.44 ABWGqgkn.net
アクセス方法次第でCPUのキャッシュミスの発生率も変わるから速度も変わる
248:デフォルトの名無しさん
15/09/14 01:17:12.52 h9CenDqd.net
>>235
プログラムが完成したら入れ替えてテストしろよ
249:デフォルトの名無しさん
15/09/14 02:27:47.71 WQ7njzDq.net
なぜcolumn majorにしなかったのか
250:デフォルトの名無しさん
15/09/14 19:17:30.03 nW8KHDe7.net
質問です
template templateという機能がありますが、これをクラステンプレートではなくて
関数テンプレートを渡す機能はありますか?
URLリンク(codepad.org)
意図としては、ライブラリを作るにあたって、ユーザーからコールバックとして
関数テンプレートを受け取りたいです。
コードの最初のFooクラスのように、クラスで包んでoperator()を定義すれば
実現できます。しかし不格好なので、 bar のように普通に定義された関数テンプレートを
渡すことはできないでしょうか?
251:デフォルトの名無しさん
15/09/14 19:24:44.32 cuv2HbJp.net
>>246
関数テンプレートを渡す機能はありません
252:デフォルトの名無しさん
15/09/14 19:29:09.13 nW8KHDe7.net
>>247
そうか。あざす。残念。
253:190
15/09/15 08:28:18.63 j+WGnnSb.net
>>194 の内容が >>190, >>193 と関連していることに気づかず失礼した。
const auto loop_times = ... に対しては
for (std::remove_const<decltype(loop_times)>::type cnt = 0; ...
for (std::decay<decltype(loop_times)>::type cnt = 0; ...
どちらで書いても期待通り動作することを確認。
const auto && loop_times = ... に対しては
前者(remove_const)はコンパイルエラー、後者(decay)は動作する。
ところで const auto && loop_times という変数宣言の && の
意味が分からないのですよ。
この&&が変数にどんな性質を与えるのか、
検索時に使うべきキーワードなど教えていただきたい。
254:デフォルトの名無しさん
15/09/15 08:37:09.59 kADVoeCZ.net
rvalue reference declaratorで検索とかどうよ
255:デフォルトの名無しさん
15/09/15 14:25:08.30 B7TuBbRI.net
endで取得したイテレータをデクリメントして
最後の要素を得るのは仕様的に問題無いでしょうか?
URLリンク(ideone.com)
256:デフォルトの名無しさん
15/09/15 19:45:47.95 AnTXPfgv.net
プログラム内で生成した連番画像データを、
動画の形式(H.264など)に圧縮して、
ネットワークに送出し、
タブレットなどの端末でストリーミング再生できるようにしたいのですが、
どのようにすればできるでしょうか?
動画の形式にするにはMediaFoundationやNVENCなどのHWエンコーダを利用する
プログラムで可能であることは分かりました。
ネットワーク経由でストリーミングする具体的な方法が分かりません。
扱えるAPIは
・WinAPI
・WinSock
・Direct3D11
・DirectShow
・MediaFoundation
などです。
よろしくお願いします。
257:デフォルトの名無しさん
15/09/15 19:48:50.92 8YL7tngp.net
>>251
最後の要素が存在するならOK
258:デフォルトの名無しさん
15/09/15 20:38:35.34 j2Iw9RkO.net
素人丸出しの質問で申し訳ありません
static const int で定義した変数を、switch-case文のラベルに使うことって可能なんでしょうか。C++的に。
なんかダメな感じはするけど、昔使ったコンパイラでは通ったような記憶もあって混乱中。
259:デフォルトの名無しさん
15/09/15 20:46:51.23 Or0Sr6DS.net
やってみりゃわかるけど、ラベルに変数使えましたけ? ???
260:デフォルトの名無しさん
15/09/15 21:25:23.69 levHHN+I.net
static const intなら大丈夫
261:デフォルトの名無しさん
15/09/15 21:31:16.73 zI3JQASJ.net
staticは関係なくね
262:デフォルトの名無しさん
15/09/15 21:31:38.97 Or0Sr6DS.net
ん enum も使えたようなw
263:デフォルトの名無しさん
15/09/15 21:36:13.99 levHHN+I.net
const int n = a;
とか定数以外を束縛できちゃうのでダメ
264:デフォルトの名無しさん
15/09/15 21:44:32.92 IZgZ7hQz.net
関数の外でconst int n = (定数);としたなら逝ける
265:デフォルトの名無しさん
15/09/15 21:57:48.20 HX9x+LxP.net
static constをconstexprに変えてコンパイルが通るならcaseにも使える
266:デフォルトの名無しさん
15/09/15 22:09:03.95 Z2SQdZ/1.net
>>255
おまえはやってみたのかよw
267:デフォルトの名無しさん
15/09/15 22:24:06.82 ucrFrhcB.net
>>251
つrbegin
268:デフォルトの名無しさん
15/09/15 22:36:25.02 WfYHRfSY.net
>>251
問題ないけど、back()やpop_back()を使う方が適切な場合が多いよ。
269:デフォルトの名無しさん
15/09/16 19:23:22.85 3SPxKhTi.net
c#なら参照も
aaa.bb();で間はドットだけだから1クリックでいいけど->は三回もクリックしないといけないから面倒
270:デフォルトの名無しさん
15/09/16 19:31:14.76 OezDmTKu.net
>>265
クリックじゃなくてプレスかタップ
271:デフォルトの名無しさん
15/09/16 19:45:37.70 FdNN8V0s.net
C++も参照は.だろ
272:デフォルトの名無しさん
15/09/16 19:49:28.49 P6BY/gAm.net
参照は.だけれど参照の実態はポインターだから
アクセスが遅い
273:デフォルトの名無しさん
15/09/16 19:59:21.74 a5qJ/F/3.net
流れが見えないレスですね
アクセス速度の話してましたっけ
274:デフォルトの名無しさん
15/09/16 20:57:52.20 +CviF6rc.net
キーボードならタイプかストロークかヒットじゃないのか
ボタンウィジェットの話?
275:デフォルトの名無しさん
15/09/16 23:22:43.19 /GUNKgZc.net
クリックは、一般英語としては「カチッと押す」くらいの意味でしか無いらしいし
そちらの意味でなら実は何ら問題ないという可能性も?
276:デフォルトの名無しさん
15/09/17 20:44:50.17 vEWjEaDX.net
そもそも突っかかる部分がどうでもよすぎてちょっと
277:デフォルトの名無しさん
15/09/17 21:00:22.78 kJeXGTkh.net
アスペは定義にこだわるんだよ
社会不適合者が唯一相手を言い負かすことのできる領域だからね
278:デフォルトの名無しさん
15/09/17 21:11:41.17 Qtg7/zjM.net
click == ポチる
279:デフォルトの名無しさん
15/09/17 21:14:01.08 /7qLf8rs.net
ソフトウェアキーボードとマウスでしょ(適当)
280:デフォルトの名無しさん
15/09/18 01:45:36.53 TWvmhBF9.net
>>273
なんでそうすぐ荒らそうとするんだお前は
281:デフォルトの名無しさん
15/09/18 02:16:02.58 ziYbj+Cy.net
規格書全�
282:R読めてないわ
283:デフォルトの名無しさん
15/09/18 09:07:58.49 4JhMPdKG.net
アスペとは何かがまるで解ってないようだな
284:デフォルトの名無しさん
15/09/18 11:51:31.83 5wBzpDO5.net
stlのiteratorであることを調べる方法はありますか?
iterator_treitsで型が定義されているかどうかを
調べられるかということです
285:デフォルトの名無しさん
15/09/18 11:59:04.47 4JhMPdKG.net
>>279
ない(断言)。
なぜならN3797にSTLなる文言が一度たりとも出てこない。
そのような分類が存在しないということだ。
「型識別子が宣言されているか否か」は正直ときどき欲しいことがあるが、
これはC++の文法上できない。
仮にis_declarated<foo>::valueのようなトレイツを作ろうにも、
fooがクラスなのかオブジェクトなのかにより構文規則が変動してしまい、
このためパースできない。
286:デフォルトの名無しさん
15/09/18 12:48:17.69 vvw8eaFK.net
opencvのcv::matが分からん。画像処理とかムリポ。
287:デフォルトの名無しさん
15/09/18 17:58:07.46 5wBzpDO5.net
#include <iostream>
using namespace std;
template<typename T>
struct A{
using type =int;
};
template <typename T>
auto f(typename A<T>::type& a){
return a;
}
int main() {
typename A<int>::type x;
cout<<f(x)<<endl;
// your code goes here
return 0;
}
どうやってマッチするようにできますか
>>280
ありがとうございます
288:デフォルトの名無しさん
15/09/18 18:27:30.80 5wBzpDO5.net
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
template<typename T>
struct A{
struct B{};
using type =B;
};
template <typename T>
auto f(typename A<T>::type& a){
return a;
}
int main() {
typename A<int>::B x;
f<typename A<int>::B>(x);
// your code goes here
return 0;
}
ソースコードを間違えました。
こちらでお願いします。 👀
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
289:デフォルトの名無しさん
15/09/18 18:37:33.56 5wBzpDO5.net
すみません
ソースコードをまた間違えました
これが最後です
#include <iostream>
using namespace std;
#include <iostream>
using namespace std;
template<typename T>
struct A{
struct B{};
};
template <typename T>
auto f(typename A<T>::B a){
return a;
}
int main() {
typename A<int>::B x;
f<typename A<int>::B>(x);
// your code goes here
return 0;
}
290:デフォルトの名無しさん
15/09/18 19:41:08.07 5wBzpDO5.net
これが最後の最後です。
コードを短くしてわかりやすくしてみました
#include<vector>
using namespace std;
template <typename T> auto f(typename vector<T>::iterator t){};
int main() {
std::vector<int> a;
f<typename vector<int>::iterator>(a.begin());
return 0;
}
291:デフォルトの名無しさん
15/09/18 20:07:17.89 5egfmsiH.net
ideone に貼っとくれ
292:デフォルトの名無しさん
15/09/18 20:44:44.53 5wBzpDO5.net
URLリンク(ideone.com)
自己解決しました
ありがとうございました
293:デフォルトの名無しさん
15/09/18 23:40:50.48 ctwqb5Ko.net
何をしたいのか全くわからんのだが
294:デフォルトの名無しさん
15/09/19 00:49:03.07 yY3lA1m6.net
>>280
>C++の文法上できない
ほんとか?
すぐ出来そうな気がするんだけど
URLリンク(ideone.com)
295:デフォルトの名無しさん
15/09/19 03:17:45.05 8Pb114IF.net
>>289
ちょっと言ってることと違う
using foo = int;
int main() {
cout << is_declared<foo>::value; //1
cout << is_declared<bar>::value; //0
}
これはできるのか?
296:デフォルトの名無しさん
15/09/19 05:09:41.19 O1tI28gd.net
>>290
それできて何の意味があるの?
297:デフォルトの名無しさん
15/09/19 05:35:18.13 YQpUAMED.net
STLなんて言葉は無い厨の馬鹿さが証明されてしまったな
298:デフォルトの名無しさん
15/09/19 08:22:51.87 e8fiNzCd.net
STLはあれだが、iterator_treitsはねーわ
どうやったら、こう、間違えるんだよ
299:デフォルトの名無しさん
15/09/19 12:03:44.27 q2VPyPCF.net
Visual C++の超拡張機能ならSFINAEでnon-dependent typeもdependent type扱いだぜ
300:デフォルトの名無しさん
15/09/21 16:46:44.70 JTlp29uf.net
ここに書いてあることって今見るとどうですか?もう8年前の記事ですが
URLリンク(espresso3389.hatenablog.com)
自分は速度欲しいところはC++、GUIとかはC#、両者をつなぐときはP/Invokeなり
C++/CLIを挟むなりとしてきましたが、全部C#で閉じないものかと思うことはあります
301:デフォルトの名無しさん
15/09/21 17:15:28.41 XzxcjOEi.net
思うに、ポインタが危険と熱く語っているけど、C#にも参照が有るし、
ポインタ演算が出来ない点を除いては、ほぼポインタが有るのと同じ状況じゃね?
参照がnullだとヌルポするんでしょ?危険度は一緒では?
彼はC#に色々期待していたようだけど、今思えば結局VBの置き換えが目的だったんだなって納得できる
302:デフォルトの名無しさん
15/09/21 17:17:30.30 8N0qbHVY.net
windowsのステマを本気にするバカはいないだろ
303:デフォルトの名無しさん
15/09/21 18:41:13.82 IJWaFyNv.net
>>296
> 参照がnullだとヌルポするんでしょ?危険度は一緒では?
典型的な C# 脳だな w
危険なのは書き込みの方だよ
304:デフォルトの名無しさん
15/09/21 18:42:53.29 0lL32CsL.net
delegateはstd::functionで代用出来るしマルチキャストデリゲートはBoostにsignal2ってのがある。これは8年以上前からある
GCもshared_ptr unique_ptrで大抵の用途に事足りる
C#はGCのせいでデストラクタが使い物にならないし、そのせいでusingを書かないと解りづらいリソースリークの元になる。どっちが優れてるとは思わない一長一短
他はこの人の言う未来が早く来るといいですねー
が8年たった今でも変わらない感想
>>296
バッファーオーバーフローが予測できない結果をうむのに比べたら安全。だからこそvalgrindなどのメモリチェックツールがある。事実は事実として認めないとね
305:デフォルトの名無しさん
15/09/21 18:50:48.72 XzxcjOEi.net
なるほど、ポインタはmemcpyが怖いって言う認識ですか
306:デフォルトの名無しさん
15/09/21 19:09:45.69 4SVIoSBj.net
ダングリングポインタのこと言ってんじゃね
307:デフォルトの名無しさん
15/09/21 19:47:50.10 IzwQBNZR.net
物理メモリが見えないから、原理的に無限のメモリを使えるキリッ
とか書いてあるんだけどさ、、、
前々から疑問なんだけど、C/C++ってデフォで関数が動的(staticでない)なんだけど、
あれって何で?メリット無いよね?
教えてエロい人。
C#やJavaはランタイムがある前提だから、実行時に動的関数のアドレスを再利用することも出来る。(やろうと思えば)
だから、確かに原理上はどんな大きなプログラムでも、一時的に使用するメモリが十分小さければ実行できる。
結果、C#やJavaには動的関数にするメリットがある。
でもC++ってないよね?
あれって分割コンパイルを円滑に行うための方便?
別にstaticである必要もないんだけどさ。
308:デフォルトの名無しさん
15/09/21 20:02:23.73 qBJEaPVd.net
>>302
>C/C++ってデフォで関数が動的(staticでない)なんだけど
よくわからない,もう少し説明がほしい
メンバ関数は「デフォ」でstatic じゃないインスタンスメソッドだがそれはC#/Javaと同じ
C#/Java はクラスに属しない関数は存在しえないが,C/C++ はクラスと結びつかない関数はありえる,ということはあるね
ランタイムの存在とインスタンスメソッド/クラスメソッドの有無とに何の関係も見出せないが?
309:デフォルトの名無しさん
15/09/21 20:02:28.82 0lL32CsL.net
>>302
何言ってるか解らないんだけど
関数のアドレスが枯渇するプログラム?何それ?
310:デフォルトの名無しさん
15/09/21 20:06:20.03 4SVIoSBj.net
関数が動的ってどういう意味なんだろう
ぐぐったらこんなのが出てきたけど
URLリンク(www5b.biglobe.ne.jp)
関数それ自体が消滅するわけじゃないよね
311:デフォルトの名無しさん
15/09/21 20:08:30.59 0lL32CsL.net
>>302
前々から疑問に思ってるんならそのままにせずにちゃんと調べた方がいいよ
あんたの書いてる事読むと基礎を全く理解しないまま放置して自分の中でこういうものと思いこんでる物が育ってる感じしかしないよ
312:デフォルトの名無しさん
15/09/21 20:08:47.78 QVf3KibQ.net
>>302
メモリ管理はOSの仕事だろう
313:デフォルトの名無しさん
15/09/21 20:11:04.82 XzxcjOEi.net
単にstaticといわれても
メンバ関数と普通の関数では意味が変わるし
それを加味しても言ってる意味が良く分からないんだが
それともライブラリの静的/動的リンクの話か?
それなら実行ファイルのサイズ削減と実行時のメモリ節約だ
同じライブラリを複数のプロセスから動的ロードすると
ライブラリのメモリ上での実態がプロセス間で共有される
314:デフォルトの名無しさん
15/09/21 20:16:03.88 qBJEaPVd.net
DLLはあまり成功しているようにみえないが‥
315:デフォルトの名無しさん
15/09/21 20:17:39.45 QVf3KibQ.net
>>305
仮に動的生成をしてるとしたら、
f()を直接呼ぶ場合と、
何かの関数を呼び、その中から呼んだ場合で
アドレスが変わると言うこと何だろうけど、本当?
316:デフォルトの名無しさん
15/09/21 20:21:39.99 XzxcjOEi.net
>>309
成功も失敗も・・・
OSのAPIはDLLにするしかないだろ
そうしないとアプリにOSそのものを静的リンクしなければならなくなるだろ、ありえん
DLLは絶対必要な仕組み
317:デフォルトの名無しさん
15/09/21 20:26:20.93 XzxcjOEi.net
>>310
>>305のページは殆ど無茶苦茶で頭痛くなるので君のような初心者は読まないほうが良い
有る程度分かった人がニヤニヤしながら読む以外に存在価値のないページ
関数のコードが動的に生成されたりはしない
スタックフレームが動的に生成されるだけ
318:デフォルトの名無しさん
15/09/21 20:27:30.64 4SVIoSBj.net
>>310
URLリンク(www5b.biglobe.ne.jp)
関数にstaticつけるとメモリに駐留するとか適当なこと言ってて
単に知識がないか間違って覚えてるっぽい
319:デフォルトの名無しさん
15/09/21 20:34:16.96 0lL32CsL.net
>>305
>>310
リンク先読んで吹いた
やべぇなこれ。思い込みでここまで書けるのもすごいが、こんなの公開して誤った知識を持つ奴が増えるのも恐ろしい。
C言語界におけるテロ行為や~
>※ プログラミングの学習において、完全に理解してから次に進むという完全主義は、学習を妨げることになります。基本は、意図したとおりコンピュータが動けばよいです。
とかかいてるけど理解しないのと誤った理解をするのは別だよな…
去年までページ更新してるみたいだし連絡したら削除してもらえんかなぁこれ少なくともC言語に関わるところ全て
320:デフォルトの名無しさん
15/09/21 20:34:19.78 f8ZVmSR1.net
>>305>>314
ワロタwww
これ絶対にわざと間違えて書いてるだろうww
321:デフォルトの名無しさん
15/09/21 20:42:48.62 az+bvJoo.net
なんかよくわからなくなってきたんだが、自由関数のアドレスっていつ決定されるの??
プログラムのロード時?だとすると、なぜ関数ポインタをテンプレートに渡せるの?
テンプレートがインスタンス化された時に相対的なアドレスが決定されるからという理解でいいのかな??
322:デフォルトの名無しさん
15/09/21 20:58:13.63 0lL32CsL.net
>>316
関数のアドレスはリンク時に決定する
テンプレートに関数を渡せるのはマクロと一緒でテンプレートを実体化したコード内に関数名そのまま埋め込まれるから
323:デフォルトの名無しさん
15/09/21 21:25:16.23 /zbs+z1X.net
>>313
ヤベー、コーラ吹いたわ
変数の知識から、頑張って類推で理解しようとしているのか
もしくはファンクタとごっちゃになってるのか
324:デフォルトの名無しさん
15/09/21 21:30:27.57 K/qYM/td.net
そこはファンタ吹いとけよ
325:デフォルトの名無しさん
15/09/21 21:31:25.34 XzxcjOEi.net
その人類推するのは大好きみたいで掛け算についても色々類推して
リボン計算とやらを発見したらしんだが、
どうみても普通の筆算の書き方を変えただけなんだが
URLリンク(www5b.biglobe.ne.jp)
326:デフォルトの名無しさん
15/09/21 21:37:25.15 IzwQBNZR.net
>>305のリンクが話題になっているが、
実は俺もそのリンクにしかたどり着けず、長年の疑問を解消できていない。
そのリンク先での内容はスタックの存在を考えていないことが間違いだ。(static変数とstatic関数を混同している)
多分、C言語は仕様にスタックの存在が仮定されていると思う。
ただ、関数自体はそのように動的に生成され、消滅しても良いことに仕様としてはなっている。
(と断言できるほど明確に記述はされていないが)
ただこの場合関数ポインタが使えなくなるため、通常のC/C++では実際には生成/消滅はしない。
結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。
だからこそ、静的関数のメリットが分からない。
C++の場合、templateは静的に展開される。
つまり、必要なものを全てコンパイル時に生成し、実行体に埋め込む。
templateは使った分だけきっちりexeが膨らむ。
従って、template等を使い尽くした場合、場合によってはアドレス空間が枯渇する。
(ただし parametar pack の場合だけ別扱いかもしれないが。)
URLリンク(en.cppreference.com)
>>310
C++/CLIでは関数は動的に配置される。
そのクラスが使用される時にメンバ関数がメモリ上に配置され、不要になれば回収される。
従って原理的には32bitマシンでも4GB以上のexeを動作させられる。(C#も多分同じ)
クラス外部から関数のアドレスを参照する場合は static である必要がある。
これは実行時に仮想関数等のアドレステーブルに配置できることを保証するため。
つまり、staticを付けるかどうかは明確に違いがある。
分かりやすくいえば、
・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上)
となる。C++/CLI、C#は出来る。Javaも多分出来る。
C/C++は多分できない。(動的関数ならできる)
327:デフォルトの名無しさん
15/09/21 21:40:23.93 QaJZDGlp.net
そのページの人はがんばって考察してるのは好感が持てる
328:デフォルトの名無しさん
15/09/21 21:46:12.22 XzxcjOEi.net
>>321
>結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。
>だからこそ、静的関数のメリットが分からない。
つまらない事を長年悩んだり、長文書き込む前に
まず基本的なCの文法を学習しては?
static void hoge()のメリットなんか初心者でも知ってる事
たぶんC言語の初心者用のサイトでも載ってる筈
329:デフォルトの名無しさん
15/09/21 21:46:34.32 4SVIoSBj.net
>>321
関数にstaticを付けた場合その関数は内部リンケージになるってだけだぞ
一体どっから動的関数やら静的関数やらが出てくるんだ…
330:片山博文MZ ◆T6xkBnTXz7B0
15/09/21 21:53:27.69 3iy+9eBG.net
typedef void (*FN)(void);
void *p = malloc(...);
memcpy(p, ...);
FN fn = (FN)p;
(*fn)();
free(p);
「動的関数」ってこんな感じ?
331:デフォルトの名無しさん
15/09/21 21:59:22.27 XzxcjOEi.net
はーそんな例とか
むしろ
proc = GetProcAddress(
の方が一般的だろうに
普段散々使っておいて
残念な人だ
332:デフォルトの名無しさん
15/09/21 22:09:21.94 /rzmNe57.net
mallocの領域を実行したらメモリ保護で落ちるだろ
20年前からワープしてきたのか
333:デフォルトの名無しさん
15/09/21 22:09:54.13 rFlrDRn6.net
型を変数として扱うことってできない?
型を格納する型 Typetype だとしたら
Typetype ttype1 = 引数の型をハッシュ化する関数(var);
if (ttype1 == ttype2) {}
みたいに
334:デフォルトの名無しさん
15/09/21 22:11:28.95 rFlrDRn6.net
ただsizeofってのはなしで
335:デフォルトの名無しさん
15/09/21 22:12:05.09 0lL32CsL.net
>>321
> ・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上)
>
> となる。C++/CLI、C#は出来る。Javaも多分出来る。
> C/C++は多分できない。(動的関数ならできる)
そりゃあ間にVMをかましてるんだから原理的には出来るだろうけど(一時記憶にメモリを使わずファイルに書き出すとかね)
まともな実効速度が出るはず無いしメリット何も無いから誰もやらないだけ。
それを出来るというには無理がある。
C/C++だって同じようにVM作れば出来る。同じようにメリット無いから誰も作らないだけ
336:デフォルトの名無しさん
15/09/21 22:12:17.14 tvQQ1s/5.net
>>328
typeid
337:デフォルトの名無しさん
15/09/21 22:15:54.75 rFlrDRn6.net
>>331
ありがとう
こんな機能があったとは知らなかった
338:片山博文MZ ◆T6xkBnTXz7B0
15/09/21 22:17:34.32 3iy+9eBG.net
VirtualProtectみたいな関数ってMacやLinuxでもあるの?
339:デフォルトの名無しさん
15/09/21 22:20:25.72 0lL32CsL.net
>>321
大体クラスとか関数単位でプログラムをロードして実行出来たところで4GBのメモリ制限に蚊に刺されるほどしか影響しねえよ
お前は実行されるコードが数GBになるプログラム作ったことあるんか?と
そんなのより普通はデータを記憶するためのヒープが圧倒的に足りなくなる
340:デフォルトの名無しさん
15/09/21 22:21:24.48 0lL32CsL.net
>>333
mprotect
341:デフォルトの名無しさん
15/09/21 22:34:48.88 IzwQBNZR.net
>>323-324
確認した結果、確かにそのようだ。こちらの勘違いだった。
こちらは純粋C++ではなくVC++遣いなので、少し混乱していた。すまん。
>>325
手動ならそういうことになる。CLRはそれを自動的にやっている。
>>330,334
CLRはそうなっている。文句はMSに言ってくれ。
個人的には、自分で書いた部分だけで4GBを越えることは今後とも無いとしても、
C/C++の場合はDLLも含めて4GBだから、こちらは越える時があるのかもしれないとは思う。
生ポインタを渡さず抽象化している場合は、一つのarrayにつき4GBの制限になる。
だから実質的にデータ部分も含めても4GBの制限がないのと同じ。
ただ素直に64bitに移行する方がいいと思うし、実際にMSもそういう判断だと思うが。
342:デフォルトの名無しさん
15/09/21 22:39:34.79 tvQQ1s/5.net
>>336
あんたの使ってるのはVC++ではなくてC++/CLIなので
スレリンク(tech板)
スレはこっち
>>310のサイトでもC++/CLIをC++だと間違って書いていて
迷惑この上ない
343:デフォルトの名無しさん
15/09/21 22:49:46.15 QVf3KibQ.net
数GBにもなるプログラムってあるのかな
何か間違っている様な気がする。
分割して10個~20個くらいに分割した方が良くないかな・・
344:デフォルトの名無しさん
15/09/21 22:53:28.63 0lL32CsL.net
>>33
MSに文句も糞もねえよ
仕様上は出来る、同じようにC言語だって仕様上は出来る
でも使える速度にならないから使えねえって言ってんの
MSだってそんな事わかってるからそんな実装にしてないだろ
実質使えないものを出来るって主張して何がしたいのか?
345:デフォルトの名無しさん
15/09/21 23:01:45.88 IzwQBNZR.net
>>337
> >>310のサイトでもC++/CLIをC++だと間違って書いていて
なるほどそういうことか。そう思って読めば確かにそうだ。
以前おかしいと思っていた説明部分も見あたらない、、、こちらも勘違いだったのかも。すまん。
> あんたの使ってるのはVC++ではなくてC++/CLIなので
使っているのはVC++だぞ。
C++はVC++6.0までだというのならそれは認めるが。
ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。
ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。
とはいえ、アンマネージで全部書けば限りなくC++に近くなるはずではあるし、
「初心者のための」なんだから、その辺はいいとは思うけど。
346:デフォルトの名無しさん
15/09/21 23:04:28.14 tvQQ1s/5.net
初心者こそC++/CLIなんて変態言語ではなく
CLRを使うのならC#を使うべきだ
347:デフォルトの名無しさん
15/09/21 23:11:16.76 XzxcjOEi.net
>ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。
>ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。
ほら、もう何にも分かってなくね
プロジェクトを作る時にCLRにするかどうか選べる
CLRにしなければ普通のC++だ
どこまで勘違いでスレを混乱させたら気が済むの?
348:デフォルトの名無しさん
15/09/21 23:12:45.18 IzwQBNZR.net
>>339
勘違いしているのだと思うけど、
C#は完全にCLR上で動いていて、関数は動的配置だぞ。これはいいか?
批判的なのはいいが、事実としてC#は既にそうなんだよ。
ランタイムまで自分で作る気ならCでもできるとも言えるが、それは普通は出来ないと言うよ。
C#の場合はそこまで含めて勝手にやってくれる。
つまり、ポインタのサイズを意識する必要がない。
Javaに至ってはポインタがないんだからポインタのサイズも糞もない。
ランタイムなんて糞遅いというのは事実なんだけど、
実際、そういう糞遅いアプリでも問題ない場合の方が大半なんだよ。
349:デフォルトの名無しさん
15/09/21 23:16:50.51 XzxcjOEi.net
それってJITのためであって
32bitの壁とか関係なくね?
C++はコンパイル言語なんでJITは無いから
始めから関係なくね
350:デフォルトの名無しさん
15/09/21 23:17:06.84 tcBLogIW.net
>>331
意地悪な回答だな
type_index教えてやらないと使いにくくてしょうがないだろ
351:デフォルトの名無しさん
15/09/21 23:19:54.09 IzwQBNZR.net
>>338
DLLのロード/アンロードはOSがやるから出来るのだけど、
C/C++の場合はDLL先の生関数ポインタも仕様的には掴めるはず。
だから、実質的にはDLLのアンロードは出来ない。
(正確に言うと、アンロード後の空間に別のDLLを配置しなおすことは出来ない)
よって、同様に、C/C++の場合は、DLLやフレームワークまで全て含めて4GBの制限になる。
今のところまだかからないけど、今後は分からないよ。
それとは別に、マルチプロセス/プロセス間通信で実現するというのはありだ。
352:デフォルトの名無しさん
15/09/21 23:26:54.98 IzwQBNZR.net
>>342
> CLRにしなければ普通のC++だ
そうだったのか。了解した。
>>344
> 32bitの壁とか関係なくね?
いや、関係ある。
生ポインタを渡す限り、アドレス空間の再利用が出来ない
353:から、 一切合切含めて4GBの制限がかかってしまうという話。 生ポインタを渡さない場合は、この制限が無くなる。 ただその制限がないとして、今の時点では特にメリットが無いというのも認める。
354:デフォルトの名無しさん
15/09/21 23:27:29.86 tvQQ1s/5.net
CLRだろうが32bitアプリのvirtual sizeが4Gを超えることはないんじゃないか
>>346
FreeLibraryすればdllは解放されるだろ
そのあとつかんだ関数ポインタの先は無効になるだろうし
解放した領域に別のdllが読み込まれても問題がない
355:デフォルトの名無しさん
15/09/21 23:30:33.86 XzxcjOEi.net
>>348
これ以上引っ掻き回さんでくれ
彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事
356:デフォルトの名無しさん
15/09/21 23:31:24.91 IzwQBNZR.net
>>341
今はそう思うけど、
C既習だと、C++と付いている方が安心するんだよ。
357:デフォルトの名無しさん
15/09/21 23:31:52.49 XzxcjOEi.net
あと、C#の関数が動的なのはJITの為であって
32bit空間でスワップしてやろうって意図はないはず
C++にJITは無いので動的である必要もなし
358:デフォルトの名無しさん
15/09/21 23:32:52.24 0lL32CsL.net
>>343
それで、そのCLIは何で実装されてるのかな?どうやって動くのかな?
そこまでちゃんと考えてる? 4GBの制限はポインタサイズだけの問題だと思ってないよね?
359:デフォルトの名無しさん
15/09/21 23:35:35.38 IzwQBNZR.net
>>349
> 彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事
そういうこと。
>>348
自分で管理してFreeするのならそれは出来る。
ただこの場合は自分で掴めるアドレス全体が4GBの制限にかかる。
CLRだと仕様的にはいくらでもつかみ放題だということ。管理する必要もない。
360:デフォルトの名無しさん
15/09/21 23:40:33.83 IzwQBNZR.net
>>352
どうやら君は理解できていない。
動的再配置の場合は、今まさに使っているもの以外は見えないんだよ。
だから、全体で4GBではなくて、各部品が4GBの制限になる。これは理解できているかい?
すまんが空回りするようならこの話はここら辺で終わりでいい。
他の人は理解できているから。
361:デフォルトの名無しさん
15/09/21 23:44:22.13 XzxcjOEi.net
嫌、俺も理解できてないし、バカなこと言ってるなって思っているから
もっと続けていいぞ
>>352の言いたい事は、CLRそのものは何ビットで動いているんだという事
CLRそのものが32bitで動いていては、どの道4GB以上は扱えないよね
362:デフォルトの名無しさん
15/09/21 23:47:39.61 0lL32CsL.net
>>354
ほらまた自分の思い込みを積み重ねて…
なんか相手するのがめんどくさくなったから >>355 さんに任せようかな!
363:デフォルトの名無しさん
15/09/21 23:49:41.24 IzwQBNZR.net
>>351
なるほどその通りだ。
関数がGCされるのは結果的なことかもしれないね。
364:デフォルトの名無しさん
15/09/21 23:50:48.00 0lL32CsL.net
まぁ最後に一つだけこれは理解出来るだろうというのを
そんなに簡単な話だったら32bit版.netフレームワークに4GBの制限なんてないよね
365:デフォルトの名無しさん
15/09/21 23:57:39.16 IzwQBNZR.net
>>355
MMUでググレ。
32bit空間でリニアに使えるのは4GBなんだけど、交代で再配置するのなら実はいくらでもいける。
ただしユーザに与えた生ポインタを変更することは出来ないため、C/C++では4GBに事実上制限される。
GC前提の場合は、この制限は見えなくなる。
366:デフォルトの名無しさん
15/09/22 00:04:04.39 JsyQDq8z.net
他人が書いたコードを読むのは
超労力がかかる
オナニーコードは
超面倒な
367:デフォルトの名無しさん
15/09/22 00:06:58.92 ThaQ2i1X.net
32bit上で4GB制限を突破させる機能の名前はx86ならPAEな
それを使ってもMMUの管理する仮想アドレス空間は4GBのまま
368:デフォルトの名無しさん
15/09/22 00:12:11.77 dkFhdmkv.net
CLRが勝手に関数(コード)をアンロードするわけないだろ。何考えてるんだ?
369:デフォルトの名無しさん
15/09/22 00:18:17.64 FQwXFz67.net
アンロードはしないけどシリアライズしてメモリ以外に保存する実装があってもおかしくはないな
もちろん使う側からは透過的に
370:デフォルトの名無しさん
15/09/22 00:24:52.12 ThaQ2i1X.net
>>363
それ実行ファイルがディスクにあるはずなのにシリアライズして保存する意味がわからねーな
直前にJITコンパイルしたバイナリを一時的にディスクに保存してから実行するとかならまぁ解るけど
371:デフォルトの名無しさん
15/09/22 00:26:02.37 PT+IC+/U.net
>>363
CLRはMSILという中間言語を実行時にJITして配置するから、
結果的に各関数は使うまで配置されないし、使い終わったら捨てられるのかと。
多分オリジナルのMSILはstaticに存在するのではないかと。
ただそれがメモリ上である必要はないが。
結果的に透過的になる。
URLリンク(msdn.microsoft.com)
372:デフォルトの名無しさん
15/09/22 00:36:49.33 PT+IC+/U.net
>>361
そこまで知っているのなら俺が言っていることの意味は分かるはずだが。
PAEまで使えばとりあえず4GBx10までは見える。
ただ、PAEがマトモに使えるようになったのはWin8からだ。
そして、そんなことをやるより64bitに移行するのをMSは選択した。
XPにPAEという声も根強かったが、ガン無視したからね。(それで正しいと思うが)