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


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

C++相談室 part119



1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part118
peace.2ch.net/test/read.cgi/tech/1435970316/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

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

266 名前:デフォルトの名無しさん [2015/09/15(火) 22:09:03.95 ID:Z2SQdZ/1.net]
>>255
おまえはやってみたのかよw

267 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 22:24:06.82 ID:ucrFrhcB.net]
>>251
つrbegin

268 名前:デフォルトの名無しさん mailto:sage [2015/09/15(火) 22:36:25.02 ID:WfYHRfSY.net]
>>251
問題ないけど、back()やpop_back()を使う方が適切な場合が多いよ。

269 名前:デフォルトの名無しさん mailto:sagete [2015/09/16(水) 19:23:22.85 ID:3SPxKhTi.net]
c#なら参照も
aaa.bb();で間はドットだけだから1クリックでいいけど->は三回もクリックしないといけないから面倒

270 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 19:31:14.76 ID:OezDmTKu.net]
>>265
クリックじゃなくてプレスかタップ

271 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 19:45:37.70 ID:FdNN8V0s.net]
C++も参照は.だろ

272 名前:デフォルトの名無しさん [2015/09/16(水) 19:49:28.49 ID:P6BY/gAm.net]
参照は.だけれど参照の実態はポインターだから
アクセスが遅い

273 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 19:59:21.74 ID:a5qJ/F/3.net]
流れが見えないレスですね
アクセス速度の話してましたっけ

274 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 20:57:52.20 ID:+CviF6rc.net]
キーボードならタイプかストロークかヒットじゃないのか
ボタンウィジェットの話?



275 名前:デフォルトの名無しさん mailto:sage [2015/09/16(水) 23:22:43.19 ID:/GUNKgZc.net]
クリックは、一般英語としては「カチッと押す」くらいの意味でしか無いらしいし
そちらの意味でなら実は何ら問題ないという可能性も?

276 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 20:44:50.17 ID:vEWjEaDX.net]
そもそも突っかかる部分がどうでもよすぎてちょっと

277 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 21:00:22.78 ID:kJeXGTkh.net]
アスペは定義にこだわるんだよ
社会不適合者が唯一相手を言い負かすことのできる領域だからね

278 名前:デフォルトの名無しさん [2015/09/17(木) 21:11:41.17 ID:Qtg7/zjM.net]
click == ポチる

279 名前:デフォルトの名無しさん mailto:sage [2015/09/17(木) 21:14:01.08 ID:/7qLf8rs.net]
ソフトウェアキーボードとマウスでしょ(適当)

280 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 01:45:36.53 ID:TWvmhBF9.net]
>>273
なんでそうすぐ荒らそうとするんだお前は

281 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 02:16:02.58 ID:ziYbj+Cy.net]
規格書全

282 名前:R読めてないわ []
[ここ壊れてます]

283 名前:デフォルトの名無しさん [2015/09/18(金) 09:07:58.49 ID:4JhMPdKG.net]
アスペとは何かがまるで解ってないようだな

284 名前:デフォルトの名無しさん [2015/09/18(金) 11:51:31.83 ID:5wBzpDO5.net]
stlのiteratorであることを調べる方法はありますか?
iterator_treitsで型が定義されているかどうかを
調べられるかということです



285 名前:デフォルトの名無しさん [2015/09/18(金) 11:59:04.47 ID:4JhMPdKG.net]
>>279
ない(断言)。
なぜならN3797にSTLなる文言が一度たりとも出てこない。
そのような分類が存在しないということだ。

「型識別子が宣言されているか否か」は正直ときどき欲しいことがあるが、
これはC++の文法上できない。
仮にis_declarated<foo>::valueのようなトレイツを作ろうにも、
fooがクラスなのかオブジェクトなのかにより構文規則が変動してしまい、
このためパースできない。

286 名前:デフォルトの名無しさん [2015/09/18(金) 12:48:17.69 ID:vvw8eaFK.net]
opencvのcv::matが分からん。画像処理とかムリポ。

287 名前:デフォルトの名無しさん [2015/09/18(金) 17:58:07.46 ID: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 名前:デフォルトの名無しさん [2015/09/18(金) 18:27:30.80 ID: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 名前:デフォルトの名無しさん [2015/09/18(金) 18:37:33.56 ID: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 名前:デフォルトの名無しさん [2015/09/18(金) 19:41:08.07 ID: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 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 20:07:17.89 ID:5egfmsiH.net]
ideone に貼っとくれ

292 名前:デフォルトの名無しさん [2015/09/18(金) 20:44:44.53 ID:5wBzpDO5.net]
ideone.com/iKRfDL
自己解決しました
ありがとうございました

293 名前:デフォルトの名無しさん mailto:sage [2015/09/18(金) 23:40:50.48 ID:ctwqb5Ko.net]
何をしたいのか全くわからんのだが

294 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 00:49:03.07 ID:yY3lA1m6.net]
>>280
>C++の文法上できない

ほんとか?
すぐ出来そうな気がするんだけど
ideone.com/IuwOg1



295 名前:デフォルトの名無しさん [2015/09/19(土) 03:17:45.05 ID:8Pb114IF.net]
>>289
ちょっと言ってることと違う
using foo = int;
int main() {
cout << is_declared<foo>::value; //1
cout << is_declared<bar>::value; //0
}
これはできるのか?

296 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 05:09:41.19 ID:O1tI28gd.net]
>>290
それできて何の意味があるの?

297 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 05:35:18.13 ID:YQpUAMED.net]
STLなんて言葉は無い厨の馬鹿さが証明されてしまったな

298 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 08:22:51.87 ID:e8fiNzCd.net]
STLはあれだが、iterator_treitsはねーわ
どうやったら、こう、間違えるんだよ

299 名前:デフォルトの名無しさん mailto:sage [2015/09/19(土) 12:03:44.27 ID:q2VPyPCF.net]
Visual C++の超拡張機能ならSFINAEでnon-dependent typeもdependent type扱いだぜ

300 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 16:46:44.70 ID:JTlp29uf.net]
ここに書いてあることって今見るとどうですか?もう8年前の記事ですが
espresso3389.hatenablog.com/entry/20070204/1170538374
自分は速度欲しいところはC++、GUIとかはC#、両者をつなぐときはP/Invokeなり
C++/CLIを挟むなりとしてきましたが、全部C#で閉じないものかと思うことはあります

301 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 17:15:28.41 ID:XzxcjOEi.net]
思うに、ポインタが危険と熱く語っているけど、C#にも参照が有るし、
ポインタ演算が出来ない点を除いては、ほぼポインタが有るのと同じ状況じゃね?
参照がnullだとヌルポするんでしょ?危険度は一緒では?
彼はC#に色々期待していたようだけど、今思えば結局VBの置き換えが目的だったんだなって納得できる

302 名前:デフォルトの名無しさん [2015/09/21(月) 17:17:30.30 ID:8N0qbHVY.net]
windowsのステマを本気にするバカはいないだろ

303 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 18:41:13.82 ID:IJWaFyNv.net]
>>296
> 参照がnullだとヌルポするんでしょ?危険度は一緒では?

典型的な C# 脳だな w
危険なのは書き込みの方だよ

304 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 18:42:53.29 ID:0lL32CsL.net]
delegateはstd::functionで代用出来るしマルチキャストデリゲートはBoostにsignal2ってのがある。これは8年以上前からある
GCもshared_ptr unique_ptrで大抵の用途に事足りる
C#はGCのせいでデストラクタが使い物にならないし、そのせいでusingを書かないと解りづらいリソースリークの元になる。どっちが優れてるとは思わない一長一短

他はこの人の言う未来が早く来るといいですねー
が8年たった今でも変わらない感想

>>296
バッファーオーバーフローが予測できない結果をうむのに比べたら安全。だからこそvalgrindなどのメモリチェックツールがある。事実は事実として認めないとね



305 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 18:50:48.72 ID:XzxcjOEi.net]
なるほど、ポインタはmemcpyが怖いって言う認識ですか

306 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 19:09:45.69 ID:4SVIoSBj.net]
ダングリングポインタのこと言ってんじゃね

307 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 19:47:50.10 ID:IzwQBNZR.net]
物理メモリが見えないから、原理的に無限のメモリを使えるキリッ
とか書いてあるんだけどさ、、、

前々から疑問なんだけど、C/C++ってデフォで関数が動的(staticでない)なんだけど、
あれって何で?メリット無いよね?
教えてエロい人。

C#やJavaはランタイムがある前提だから、実行時に動的関数のアドレスを再利用することも出来る。(やろうと思えば)
だから、確かに原理上はどんな大きなプログラムでも、一時的に使用するメモリが十分小さければ実行できる。
結果、C#やJavaには動的関数にするメリットがある。

でもC++ってないよね?
あれって分割コンパイルを円滑に行うための方便?
別にstaticである必要もないんだけどさ。

308 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:02:23.73 ID:qBJEaPVd.net]
>>302
>C/C++ってデフォで関数が動的(staticでない)なんだけど
よくわからない,もう少し説明がほしい
メンバ関数は「デフォ」でstatic じゃないインスタンスメソッドだがそれはC#/Javaと同じ
C#/Java はクラスに属しない関数は存在しえないが,C/C++ はクラスと結びつかない関数はありえる,ということはあるね

ランタイムの存在とインスタンスメソッド/クラスメソッドの有無とに何の関係も見出せないが?

309 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:02:28.82 ID:0lL32CsL.net]
>>302
何言ってるか解らないんだけど
関数のアドレスが枯渇するプログラム?何それ?

310 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:06:20.03 ID:4SVIoSBj.net]
関数が動的ってどういう意味なんだろう
ぐぐったらこんなのが出てきたけど
ttp://www5b.biglobe.ne.jp/~suugaku/vc++kougi/ckougi/dai8koudai3wa.html
関数それ自体が消滅するわけじゃないよね

311 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:08:30.59 ID:0lL32CsL.net]
>>302
前々から疑問に思ってるんならそのままにせずにちゃんと調べた方がいいよ

あんたの書いてる事読むと基礎を全く理解しないまま放置して自分の中でこういうものと思いこんでる物が育ってる感じしかしないよ

312 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:08:47.78 ID:QVf3KibQ.net]
>>302
メモリ管理はOSの仕事だろう

313 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:11:04.82 ID:XzxcjOEi.net]
単にstaticといわれても
メンバ関数と普通の関数では意味が変わるし
それを加味しても言ってる意味が良く分からないんだが

それともライブラリの静的/動的リンクの話か?
それなら実行ファイルのサイズ削減と実行時のメモリ節約だ
同じライブラリを複数のプロセスから動的ロードすると
ライブラリのメモリ上での実態がプロセス間で共有される

314 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:16:03.88 ID:qBJEaPVd.net]
DLLはあまり成功しているようにみえないが‥



315 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:17:39.45 ID:QVf3KibQ.net]
>>305
仮に動的生成をしてるとしたら、
f()を直接呼ぶ場合と、
何かの関数を呼び、その中から呼んだ場合で
アドレスが変わると言うこと何だろうけど、本当?

316 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:21:39.99 ID:XzxcjOEi.net]
>>309
成功も失敗も・・・
OSのAPIはDLLにするしかないだろ
そうしないとアプリにOSそのものを静的リンクしなければならなくなるだろ、ありえん
DLLは絶対必要な仕組み

317 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:26:20.93 ID:XzxcjOEi.net]
>>310
>>305のページは殆ど無茶苦茶で頭痛くなるので君のような初心者は読まないほうが良い
有る程度分かった人がニヤニヤしながら読む以外に存在価値のないページ
関数のコードが動的に生成されたりはしない
スタックフレームが動的に生成されるだけ

318 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:27:30.64 ID:4SVIoSBj.net]
>>310
ttp://www5b.biglobe.ne.jp/~suugaku/vc++kougi/ckougi/dai8koudai3wa.html
関数にstaticつけるとメモリに駐留するとか適当なこと言ってて
単に知識がないか間違って覚えてるっぽい

319 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:34:16.96 ID:0lL32CsL.net]
>>305
>>310
リンク先読んで吹いた
やべぇなこれ。思い込みでここまで書けるのもすごいが、こんなの公開して誤った知識を持つ奴が増えるのも恐ろしい。
C言語界におけるテロ行為や〜

>※ プログラミングの学習において、完全に理解してから次に進むという完全主義は、学習を妨げることになります。基本は、意図したとおりコンピュータが動けばよいです。

とかかいてるけど理解しないのと誤った理解をするのは別だよな…

去年までページ更新してるみたいだし連絡したら削除してもらえんかなぁこれ少なくともC言語に関わるところ全て

320 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:34:19.78 ID:f8ZVmSR1.net]
>>305>>314
ワロタwww
これ絶対にわざと間違えて書いてるだろうww

321 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:42:48.62 ID:az+bvJoo.net]
なんかよくわからなくなってきたんだが、自由関数のアドレスっていつ決定されるの??
プログラムのロード時?だとすると、なぜ関数ポインタをテンプレートに渡せるの?
テンプレートがインスタンス化された時に相対的なアドレスが決定されるからという理解でいいのかな??

322 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 20:58:13.63 ID:0lL32CsL.net]
>>316
関数のアドレスはリンク時に決定する

テンプレートに関数を渡せるのはマクロと一緒でテンプレートを実体化したコード内に関数名そのまま埋め込まれるから

323 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:25:16.23 ID:/zbs+z1X.net]
>>313
ヤベー、コーラ吹いたわ

変数の知識から、頑張って類推で理解しようとしているのか
もしくはファンクタとごっちゃになってるのか

324 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:30:27.57 ID:K/qYM/td.net]
そこはファンタ吹いとけよ



325 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:31:25.34 ID:XzxcjOEi.net]
その人類推するのは大好きみたいで掛け算についても色々類推して
リボン計算とやらを発見したらしんだが、
どうみても普通の筆算の書き方を変えただけなんだが
www5b.biglobe.ne.jp/~suugaku/neko/dai1koudai6wa.html

326 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:37:25.15 ID:IzwQBNZR.net]
>>305のリンクが話題になっているが、
実は俺もそのリンクにしかたどり着けず、長年の疑問を解消できていない。
そのリンク先での内容はスタックの存在を考えていないことが間違いだ。(static変数とstatic関数を混同している)
多分、C言語は仕様にスタックの存在が仮定されていると思う。

ただ、関数自体はそのように動的に生成され、消滅しても良いことに仕様としてはなっている。
(と断言できるほど明確に記述はされていないが)
ただこの場合関数ポインタが使えなくなるため、通常のC/C++では実際には生成/消滅はしない。
結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。
だからこそ、静的関数のメリットが分からない。

C++の場合、templateは静的に展開される。
つまり、必要なものを全てコンパイル時に生成し、実行体に埋め込む。
templateは使った分だけきっちりexeが膨らむ。
従って、template等を使い尽くした場合、場合によってはアドレス空間が枯渇する。
(ただし parametar pack の場合だけ別扱いかもしれないが。)
en.cppreference.com/w/cpp/language/parameter_pack

>>310
C++/CLIでは関数は動的に配置される。
そのクラスが使用される時にメンバ関数がメモリ上に配置され、不要になれば回収される。
従って原理的には32bitマシンでも4GB以上のexeを動作させられる。(C#も多分同じ)
クラス外部から関数のアドレスを参照する場合は static である必要がある。
これは実行時に仮想関数等のアドレステーブルに配置できることを保証するため。
つまり、staticを付けるかどうかは明確に違いがある。

分かりやすくいえば、

・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上)

となる。C++/CLI、C#は出来る。Javaも多分出来る。
C/C++は多分できない。(動的関数ならできる)

327 名前:デフォルトの名無しさん [2015/09/21(月) 21:40:23.93 ID:QaJZDGlp.net]
そのページの人はがんばって考察してるのは好感が持てる

328 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:46:12.22 ID:XzxcjOEi.net]
>>321
>結果的にC/C++の場合の静的関数(static void hoge()等)と動的関数(void hoge()等)に大差はない。
>だからこそ、静的関数のメリットが分からない。

つまらない事を長年悩んだり、長文書き込む前に
まず基本的なCの文法を学習しては?
static void hoge()のメリットなんか初心者でも知ってる事
たぶんC言語の初心者用のサイトでも載ってる筈

329 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:46:34.32 ID:4SVIoSBj.net]
>>321
関数にstaticを付けた場合その関数は内部リンケージになるってだけだぞ
一体どっから動的関数やら静的関数やらが出てくるんだ…

330 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/21(月) 21:53:27.69 ID:3iy+9eBG.net]
typedef void (*FN)(void);
void *p = malloc(...);
memcpy(p, ...);
FN fn = (FN)p;
(*fn)();
free(p);
「動的関数」ってこんな感じ?

331 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 21:59:22.27 ID:XzxcjOEi.net]
はーそんな例とか
むしろ
proc = GetProcAddress(
の方が一般的だろうに
普段散々使っておいて
残念な人だ

332 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:09:21.94 ID:/rzmNe57.net]
mallocの領域を実行したらメモリ保護で落ちるだろ
20年前からワープしてきたのか

333 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:09:54.13 ID:rFlrDRn6.net]
型を変数として扱うことってできない?
型を格納する型 Typetype だとしたら
Typetype ttype1 = 引数の型をハッシュ化する関数(var);
if (ttype1 == ttype2) {}
みたいに

334 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:11:28.95 ID:rFlrDRn6.net]
ただsizeofってのはなしで



335 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:12:05.09 ID:0lL32CsL.net]
>>321
> ・4GB以上のexeを32bitマシンで実行できるか?(データではなく、命令部分だけで4GB以上)
>
> となる。C++/CLI、C#は出来る。Javaも多分出来る。
> C/C++は多分できない。(動的関数ならできる)

そりゃあ間にVMをかましてるんだから原理的には出来るだろうけど(一時記憶にメモリを使わずファイルに書き出すとかね)
まともな実効速度が出るはず無いしメリット何も無いから誰もやらないだけ。
それを出来るというには無理がある。

C/C++だって同じようにVM作れば出来る。同じようにメリット無いから誰も作らないだけ

336 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:12:17.14 ID:tvQQ1s/5.net]
>>328
typeid

337 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:15:54.75 ID:rFlrDRn6.net]
>>331
ありがとう
こんな機能があったとは知らなかった

338 名前:片山博文MZ ◆T6xkBnTXz7B0 mailto:sage [2015/09/21(月) 22:17:34.32 ID:3iy+9eBG.net]
VirtualProtectみたいな関数ってMacやLinuxでもあるの?

339 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:20:25.72 ID:0lL32CsL.net]
>>321
大体クラスとか関数単位でプログラムをロードして実行出来たところで4GBのメモリ制限に蚊に刺されるほどしか影響しねえよ
お前は実行されるコードが数GBになるプログラム作ったことあるんか?と
そんなのより普通はデータを記憶するためのヒープが圧倒的に足りなくなる

340 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:21:24.48 ID:0lL32CsL.net]
>>333
mprotect

341 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:34:48.88 ID:IzwQBNZR.net]
>>323-324
確認した結果、確かにそのようだ。こちらの勘違いだった。
こちらは純粋C++ではなくVC++遣いなので、少し混乱していた。すまん。

>>325
手動ならそういうことになる。CLRはそれを自動的にやっている。

>>330,334
CLRはそうなっている。文句はMSに言ってくれ。
個人的には、自分で書いた部分だけで4GBを越えることは今後とも無いとしても、
C/C++の場合はDLLも含めて4GBだから、こちらは越える時があるのかもしれないとは思う。

生ポインタを渡さず抽象化している場合は、一つのarrayにつき4GBの制限になる。
だから実質的にデータ部分も含めても4GBの制限がないのと同じ。
ただ素直に64bitに移行する方がいいと思うし、実際にMSもそういう判断だと思うが。

342 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:39:34.79 ID:tvQQ1s/5.net]
>>336
あんたの使ってるのはVC++ではなくてC++/CLIなので
ttp://peace.2ch.net/test/read.cgi/tech/1268613679/
スレはこっち

>>310のサイトでもC++/CLIをC++だと間違って書いていて
迷惑この上ない

343 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:49:46.15 ID:QVf3KibQ.net]
数GBにもなるプログラムってあるのかな
何か間違っている様な気がする。
分割して10個〜20個くらいに分割した方が良くないかな・・

344 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 22:53:28.63 ID:0lL32CsL.net]
>>33
MSに文句も糞もねえよ
仕様上は出来る、同じようにC言語だって仕様上は出来る
でも使える速度にならないから使えねえって言ってんの
MSだってそんな事わかってるからそんな実装にしてないだろ

実質使えないものを出来るって主張して何がしたいのか?



345 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:01:45.88 ID:IzwQBNZR.net]
>>337
> >>310のサイトでもC++/CLIをC++だと間違って書いていて
なるほどそういうことか。そう思って読めば確かにそうだ。
以前おかしいと思っていた説明部分も見あたらない、、、こちらも勘違いだったのかも。すまん。

> あんたの使ってるのはVC++ではなくてC++/CLIなので
使っているのはVC++だぞ。
C++はVC++6.0までだというのならそれは認めるが。

ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。
ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。
とはいえ、アンマネージで全部書けば限りなくC++に近くなるはずではあるし、
「初心者のための」なんだから、その辺はいいとは思うけど。

346 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:04:28.14 ID:tvQQ1s/5.net]
初心者こそC++/CLIなんて変態言語ではなく
CLRを使うのならC#を使うべきだ

347 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:11:16.76 ID:XzxcjOEi.net]
>ただ、Windows上で一番お手軽なC++風の環境はVC++なんだよ。
>ただそれは実はC++/CLIであり、似て非なる言語なところが問題なんだが。

ほら、もう何にも分かってなくね
プロジェクトを作る時にCLRにするかどうか選べる
CLRにしなければ普通のC++だ
どこまで勘違いでスレを混乱させたら気が済むの?

348 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:12:45.18 ID:IzwQBNZR.net]
>>339
勘違いしているのだと思うけど、
C#は完全にCLR上で動いていて、関数は動的配置だぞ。これはいいか?
批判的なのはいいが、事実としてC#は既にそうなんだよ。

ランタイムまで自分で作る気ならCでもできるとも言えるが、それは普通は出来ないと言うよ。
C#の場合はそこまで含めて勝手にやってくれる。
つまり、ポインタのサイズを意識する必要がない。
Javaに至ってはポインタがないんだからポインタのサイズも糞もない。

ランタイムなんて糞遅いというのは事実なんだけど、
実際、そういう糞遅いアプリでも問題ない場合の方が大半なんだよ。

349 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:16:50.51 ID:XzxcjOEi.net]
それってJITのためであって
32bitの壁とか関係なくね?
C++はコンパイル言語なんでJITは無いから
始めから関係なくね

350 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:17:06.84 ID:tcBLogIW.net]
>>331
意地悪な回答だな
type_index教えてやらないと使いにくくてしょうがないだろ

351 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:19:54.09 ID:IzwQBNZR.net]
>>338
DLLのロード/アンロードはOSがやるから出来るのだけど、
C/C++の場合はDLL先の生関数ポインタも仕様的には掴めるはず。
だから、実質的にはDLLのアンロードは出来ない。
(正確に言うと、アンロード後の空間に別のDLLを配置しなおすことは出来ない)

よって、同様に、C/C++の場合は、DLLやフレームワークまで全て含めて4GBの制限になる。
今のところまだかからないけど、今後は分からないよ。

それとは別に、マルチプロセス/プロセス間通信で実現するというのはありだ。

352 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:26:54.98 ID:IzwQBNZR.net]
>>342
> CLRにしなければ普通のC++だ
そうだったのか。了解した。

>>344
> 32bitの壁とか関係なくね?
いや、関係ある。
生ポインタを渡す限り、アドレス空間の再利用が出来ない

353 名前:から、
一切合切含めて4GBの制限がかかってしまうという話。
生ポインタを渡さない場合は、この制限が無くなる。

ただその制限がないとして、今の時点では特にメリットが無いというのも認める。
[]
[ここ壊れてます]

354 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:27:29.86 ID:tvQQ1s/5.net]
CLRだろうが32bitアプリのvirtual sizeが4Gを超えることはないんじゃないか

>>346
FreeLibraryすればdllは解放されるだろ
そのあとつかんだ関数ポインタの先は無効になるだろうし
解放した領域に別のdllが読み込まれても問題がない



355 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:30:33.86 ID:XzxcjOEi.net]
>>348
これ以上引っ掻き回さんでくれ
彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事

356 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:31:24.91 ID:IzwQBNZR.net]
>>341
今はそう思うけど、
C既習だと、C++と付いている方が安心するんだよ。

357 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:31:52.49 ID:XzxcjOEi.net]
あと、C#の関数が動的なのはJITの為であって
32bit空間でスワップしてやろうって意図はないはず
C++にJITは無いので動的である必要もなし

358 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:32:52.24 ID:0lL32CsL.net]
>>343
それで、そのCLIは何で実装されてるのかな?どうやって動くのかな?
そこまでちゃんと考えてる? 4GBの制限はポインタサイズだけの問題だと思ってないよね?

359 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:35:35.38 ID:IzwQBNZR.net]
>>349
> 彼が言ってるのは明示的なFreeLibraryじゃなくてOSが強制的にDLLをアンロードしてスワップする事
そういうこと。

>>348
自分で管理してFreeするのならそれは出来る。
ただこの場合は自分で掴めるアドレス全体が4GBの制限にかかる。
CLRだと仕様的にはいくらでもつかみ放題だということ。管理する必要もない。

360 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:40:33.83 ID:IzwQBNZR.net]
>>352
どうやら君は理解できていない。
動的再配置の場合は、今まさに使っているもの以外は見えないんだよ。
だから、全体で4GBではなくて、各部品が4GBの制限になる。これは理解できているかい?

すまんが空回りするようならこの話はここら辺で終わりでいい。
他の人は理解できているから。

361 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:44:22.13 ID:XzxcjOEi.net]
嫌、俺も理解できてないし、バカなこと言ってるなって思っているから
もっと続けていいぞ

>>352の言いたい事は、CLRそのものは何ビットで動いているんだという事
CLRそのものが32bitで動いていては、どの道4GB以上は扱えないよね

362 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:47:39.61 ID:0lL32CsL.net]
>>354
ほらまた自分の思い込みを積み重ねて…
なんか相手するのがめんどくさくなったから >>355 さんに任せようかな!

363 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:49:41.24 ID:IzwQBNZR.net]
>>351
なるほどその通りだ。
関数がGCされるのは結果的なことかもしれないね。

364 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:50:48.00 ID:0lL32CsL.net]
まぁ最後に一つだけこれは理解出来るだろうというのを
そんなに簡単な話だったら32bit版.netフレームワークに4GBの制限なんてないよね



365 名前:デフォルトの名無しさん mailto:sage [2015/09/21(月) 23:57:39.16 ID:IzwQBNZR.net]
>>355
MMUでググレ。
32bit空間でリニアに使えるのは4GBなんだけど、交代で再配置するのなら実はいくらでもいける。
ただしユーザに与えた生ポインタを変更することは出来ないため、C/C++では4GBに事実上制限される。
GC前提の場合は、この制限は見えなくなる。

366 名前:デフォルトの名無しさん mailto:sage [2015/09/22(火) 00:04:04.39 ID:JsyQDq8z.net]
他人が書いたコードを読むのは
超労力がかかる

オナニーコードは
超面倒な






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

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

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