トップページ > プログラム > 2015年11月22日 > /loq94Ox

書き込み順位&時間帯一覧

2 位/192 ID中時間01234567891011121314151617181920212223Total
書き込み数05000000000010041320221122



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
Subversion r15
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net

書き込みレス一覧

Subversion r15
420 :デフォルトの名無しさん[sage]:2015/11/22(日) 01:10:45.52 ID:/loq94Ox
質問ですが
Q1. svnで削除され、かつheadまでの間マージ等で復活してもいないファイルをリポジトリから完全削除する簡単なやり方ってないでしょうか。
svnadmin dump old_repo | svndumpfilter exclude --pattern "*.csv" | svnadmin load new_repo
でとりあえず"*.csv"にマッチするやつだけはまとめて消せましたが、
これをいちいち人手で削除対象を指定するのではなく、「svnで削除され、かつheadまでの間マージ等で復活してもいないファイル」という条件で消したい。

Q2. Rev.1〜24を取り出せなくして(checkoutもupdateもできなくして)、かつリビジョン番号は保ちたいのですが、なんか方法ありませんか。
svnadmin dump -25:head | svn load new_repoとしたら一応取り出せなくすることはできたのですが、
勝手にリポジトリ番号が1始まりになってしまいまつ…
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
967 :デフォルトの名無しさん[sage]:2015/11/22(日) 01:17:22.33 ID:/loq94Ox
>>966
そんあことはわかっている文章をよくお読み
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
968 :デフォルトの名無しさん[sage]:2015/11/22(日) 01:21:48.53 ID:/loq94Ox
あー「実体」と言う言葉を「領域」ととられたのか、
>>965の「実体」は、(変数の)値、ぐらいの意味ですにょ
つまりbのインスタンス
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
970 :デフォルトの名無しさん[sage]:2015/11/22(日) 01:35:03.98 ID:/loq94Ox
最新規格のC99とか知らんかったが
>byte b[size]; // ここ
みたいな動的配列が可能なのか…
てコンパイラの実装としては_alloca()でスタック上に配列の領域をとる、の一択になりそう…
これはスタックフレームが伸び縮みする例外的なケースと言える(「スタックフレーム」の定義にもよるが、)

ただそれにしてもforループk回目のb[]の領域を、ループk-1回目のb[]とは別にとる理由が無いから、
アドレスが変わるのはTCCとかいうコンパイラのアレである可能性が大
ていうか個人的には_alloca()がらみの技術は君子危うきに近寄らずの類
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
971 :デフォルトの名無しさん[sage]:2015/11/22(日) 01:40:22.17 ID:/loq94Ox
スマン、
>forループk回目のb[]の領域を、ループk-1回目のb[]とは別にとる理由
これ有るわ;
動的配列がb[], c[]の2個あって、
forループk-1回目でb[], c[]とも4バイトの領域をとり、
ループ2回目でb[], c[]とも8バイトに増えた場合でかつループ回数が定数でない場合、
どうやってもb[]かc[]のどちらかはアドレスが変わらざるおえない
(TCCだと両方変わるのかもしれんが、GCCでも片方は変わらざるを得ない希ガス
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
979 :デフォルトの名無しさん[sage]:2015/11/22(日) 12:51:48.18 ID:/loq94Ox
>>978
だーかーら、そのスタックを戻す戻さないの話は変数の「領域」を使いまわすという話でしょ
変数の「値」については自分で
>foo( ) から戻った後は二度と使われない
と書いてあるやんけ
つまり言ってる事は>>968で文言を補足した上での>>965と同じで、「使わなくなった変数の領域を残して新たに領域を取り直す必要は無い」
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
981 :デフォルトの名無しさん[sage]:2015/11/22(日) 15:03:16.41 ID:/loq94Ox
>>980
> >>978 の話は使わなくなった引数の領域を残したまま新たに引数領域を取り直すって話しだ
強弁すぐる…
領域のアドレスが変わらず上書きされるのなら、手段が何であれ領域は使いまわされているのであって、新たな領域の取り直しではない

そもそも今の話の流れは、「変数b(後にVLA b[]と判明)のアドレスが変わってるんだけど何で?」というのが発端であって
GCCの実装が「ループの度に」いったんスタック上にとったb[]をfreeして再alloca()する実装なのか、
最初にいったんスタック上にとったb[]をfreeせずに使いまわすのか(つまり手段の違い)は問題ではない(どっちでもb[]のアドレスは変わらない

それをpush/popするから(アドレスは変わらないのに)領域を取り直してるんだ、とか流れを理解する気か能力がゼロなんじゃ…
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
982 :デフォルトの名無しさん[sage]:2015/11/22(日) 15:15:29.31 ID:/loq94Ox
あースマン>>978が何を言わんtとしているかわかった気がするわ
push→pop→pusu→pop
というのが
push→push→pop×2 に相当するSPの減算
に最適化されるケースがあるという主張か、
これは本当ですか?ガチで最適化するなら冒頭のpush→pop→pushも無くなるんじゃ…
(何かの相対アドレッシングによるスタックに対する書き込みになる
すると新たな領域を取り直す必要はまるで無い
かつ、ループ回数が定数でないループ内(←いまここ)の中で>>978が主張するような最適化をされたら死ぬ
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
984 :デフォルトの名無しさん[sage]:2015/11/22(日) 15:41:10.96 ID:/loq94Ox
>>983
よしんばそうだったとして、ループの度に変数のアドレスが変わるような話なのかどうか、
push→push→pop×2 に相当するSPの減算
がループの中で行われるのであれば、今の話の流れ(ループの度に変数のアドレスが変わる)とは関係しないんじゃー!
つまり無関係。
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
988 :デフォルトの名無しさん[sage]:2015/11/22(日) 15:59:01.42 ID:/loq94Ox
>>986
void foo() {  b[]をalloca();  for for (n回回す) { b[]使う }  b[]をfree(); return; } →ワカル (もともとの問題提起の解決編
void foo() {  for (n回回す) { push→push→pop×2 に相当するSPの減算 }  return; } →ワカル (>>967に対する病的な例外の指摘
void foo() {  for (n回回す) { push→push }   pop×2*n に相当するSPの減算; return } →ワカラン… (>>986

nが1億でb[]の要素サイズが8 Byteとかだったらどうすんじゃー!
8億バイトものスタックを20年前の X68Kでとれたんですか…(汗
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
989 :デフォルトの名無しさん[sage]:2015/11/22(日) 16:02:16.18 ID:/loq94Ox
>>987
>>986が今の流れに対していかに空想的かおわかりいただけただろうか…
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
991 :デフォルトの名無しさん[sage]:2015/11/22(日) 17:09:34.23 ID:/loq94Ox
関数内で確保したスタック領域を関数終了時に一気に開放すること自体には、それがどんな抜け方であっても特に技術的課題は無い
(FPか何かがSPをどこまで戻せばよいか知ってる

alloca()がgotoでスキップされたりされなかったりしても同じ
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
992 :デフォルトの名無しさん[sage]:2015/11/22(日) 17:18:32.00 ID:/loq94Ox
ていうか調べたらC99のVLAっって確保したサイズを後から変えられないってネットに書いてあるから、
関数先頭でalloca()して、抜けるときにSP操作して戻る、という最適化で何の問題も無い気がしてきた…orz
(つまり>>971のようにループの度に配列サイズが増えるようなケースは杞憂
つまり、関数内でどんなしっちゃかめっちゃかなgotoをやっても再alloca()の必要無しで、
開放もSPをあらかじめ記憶していた値に戻すだけなので問題無し
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
994 :デフォルトの名無しさん[sage]:2015/11/22(日) 17:39:58.11 ID:/loq94Ox
(>>993はどこまで話を戻す気なんだ…
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
998 :デフォルトの名無しさん[sage]:2015/11/22(日) 18:00:04.03 ID:/loq94Ox
も…最適化はカオス…

もともとはといえば、「スコープを抜けた変数の領域を残す「必要は無い」(>>965)」に対し、
「スコープを抜けた変数の領域をあえて残すケースがあるわドアホウ(>>966, >>987)」
という論理的におかしい噛み付き方がなされたのがスレが伸びた原因
C言語なら俺に聞け(入門編)Part 130 [転載禁止]©2ch.net
999 :デフォルトの名無しさん[sage]:2015/11/22(日) 18:07:32.40 ID:/loq94Ox
話がpush/pop最適化の横道にそれずにVLAのままであったなら、
「スコープを抜けたVLA変数の領域をあえて残す「必要がある」」という正しく対立する主張となり、
ループ内で確保したVLAの開放をいつやるのかは最適化ポリシーの違いと言う結論に達して済んだんだけど…
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
12 :デフォルトの名無しさん[sage]:2015/11/22(日) 20:05:04.34 ID:/loq94Ox
>>9
そういうことにしたければそういうことにすればいいんじゃ…

VLAとは関係ないpush/pop最適化の話をやぶから棒に振っておきながら、
そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん
話題を最初からTCCのVLAの実装の話であったかのように捻じ曲げた醜態はdatと皆の記憶に残ったであろう…
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
15 :デフォルトの名無しさん[sage]:2015/11/22(日) 20:41:53.91 ID:/loq94Ox
>>14
ID:dHfinU55が何と主張しようとも、>>12と次の3点が事実なわけだが…
 ・ループ状況におけるpush/pop最適化がうまく働くケースと、スタックオーバーフローを引き起こすケースについては漏れが述べた(特に否定されず
 ・VLAについて、ループ内でサイズが増える場合は都度新たな領域の確保が必要であることも漏れが述べた(特に否定されず
 ・gotoでいかに関数ないジャンプしようとも、VLAの開放は関数を抜ける際に問題なく行えることも漏れが述べた(特に否定されず
この上何を理解せよというのか
傷ついたID:dHfinU55の心?

>>13
(以下略
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
19 :デフォルトの名無しさん[sage]:2015/11/22(日) 21:12:54.40 ID:/loq94Ox
>>16
>VLA も push/pop もスタック操作であることも理解できないのかよ…
素人カヨ…
1. 藻前が出したpush/popはcallerが準備する(引数領域の)話
本来は領域を残すことは必須では無い
2. VLAはcalleeが中でやる話であって、対象となるスタックフレームの位置が違う
なおかつ、ループ状況かつサイズ増大する配列が複数のときは、領域を残すことが必須となる。

これらが一緒とか、TCCの話にすり替えた件といい、話の捻じ曲げはお得意のご様子で…

>> そんな最適化はループ状況でスタックオーバーフローを起こすと突っ込まれたとたん
>元々その話なんだが…
>ひょっとしてスタックオーバーフローは自分が最初に指摘したとか思ってたりするのか w
語るに落ちた?
本来のpush/pop最適化はスタックオーバーフローなんて起こしません
スタックオーバーフローを起こすぐらいなら、ループ内でSPをオフセットして帳尻を合わせるインストラクションを1発実行する方がまだマシだからだ
(>>15の箇条書きの一発目、または前スレ>>998の「ワカル」2発目

どっちがより深く理解して喋ってるのか衆目に明らかになったってカンジ?
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
21 :デフォルトの名無しさん[sage]:2015/11/22(日) 21:32:00.55 ID:/loq94Ox
スマン漏れも半分語るに落ちてたわorz
>>19の前半のは撤回
ループ内でサイズ増大するVLAが複数あっても、ループの終わり(そのVLAがスコープを抜けたとき)にSPリセットすれば済むわ;

それはそうとして、
>>20
んまーそんな感じやね
ただ「実体を残す事にはパフォーマンス上の理由がある。 」と言い出した
(SPリセットしないことを言い出した)のは前スレの>966であって漏れジャナーイ
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
28 :デフォルトの名無しさん[sage]:2015/11/22(日) 22:33:39.14 ID:/loq94Ox
>>25
>そいつはパフォーマンス上「やることが」あるって書いてる
漏れがスコープを抜けた変数の実体を残す必要は無い、と書いたのに対して
なんかスゲー剣幕で、実体を残す奴はバカいわんばかりに(実際には「アホウ」と書いてた;
「実体を残す事にはパフォーマンス上の理由がある。 」と書いてた気がするYO

ていうかやっぱあんまりVLAに関係ない発言だったのねん(そもそも>>966のときはまだbが通常の自動変数というスレの流れだったし、
C言語なら俺に聞け(入門編)Part 131 [転載禁止]©2ch.net
31 :デフォルトの名無しさん[sage]:2015/11/22(日) 23:34:21.20 ID:/loq94Ox
>>29
ちょっそれtypoだから
>>28訂正
誤: 実体を残す奴はバカいわんばかりに
正: 実体を残さない奴はバカいわんばかりに


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。