C言語なら俺に聞け 154
■ このスレッドは過去ログ倉庫に格納されています
>>555
1ビットCPU が存在するのなら作ってさしあげましょう http://www.st.rim.or.jp/~nkomatsu/motorola/MC14500.html >>559
1bit の CPU が存在するのなら作りますが、現実には存在しないのでは?
>>558 はプログラムカウンタを持っていない以上、CPU とは言いがたいですね longjmpて関数の垣根を飛び越えるためのものだろ
jmp_bufをローカル変数になんて有り得なくね? >>551
ああ、ちゃんとやってるよ
おまえやってないんだろ?
C++の動きもわかってねえな
>>554
日本語でおk >>561
setjmp と同じかより深いスコープまたはスタックフレームから戻ってくるだけだから、
setjmp の呼び出し時点で存在しているスコープであればローカルだろうとグローバルだろうと構わないよ。 補足すると、ローカル変数に置いた jmp_buf を呼び出し先の関数から直接参照することはできないから、引数かなにかでポインタを引き回さないといけない。
これ嫌ならグローバル使う感じじゃね。 >>560
プログラムカウンターも1bitじゃないからダメとか言いそうw >>562
> ああ、ちゃんとやってるよ
そりゃすげーな
> おまえやってないんだろ?
うん、性能も悪いしバカみたいだもんw
> C++の動きもわかってねえな
具体的に指摘しなよ
まあ出来ないから悪態しかつけないんだろうけど >>563
それやるのにlongjmpなんぞ使わないだろって
普通にif (err) return;で戻ってくりゃいいだけじゃん >>569
いや、盛大な理解不足をしてそうだな。
そもそもとして setjmp をしたスコープから上位に出てしまったら longjmp はできないぞ?
setjmp をした時点のスタックが壊れていないことが条件だから。 時間をトリガーとした実装について質問したいです。2つあります。
1
何時何分という絶対値をトリガーとしてスレッドを起動orコールバック関数の実行をしたいです。
どのような実装したらよいでしょうか。。
2
相対値、例えば何秒後というトリガーで1と同じ制限の処理をしたいときにはどうしたらよいでしょうか。
いずれも、任意個の処理とトリガーをつくりたいです。
POSIXの範囲でできるのが好ましいですが、不可能であればLinuxに依存してもOKです。
よろしくおねげーします。 >>573
一つのプロセスの中でやりたいんですよ。決してシステム管理の一貫ではないです。 >>572
2はsleepしてスレッド起動するだけだろ
1は 目的日時 - 現在時間 を計算して相対値にしてから2と同じ処理をすればいい >>572
sleepしながら時刻を確認するタイマースレッドでも作れば?
直近の時刻まで時間があるなら大まかにループして、イベント時刻に近づいたら細かくループすればそこそこの分解能と低CPU時間を両立できるんじゃね。
新しいタイマーをリストに加えたらタイマースレッドに signal 投げれば sleep からすぐ戻るから再計算もできるでしょ。 pthread_cond_timedwait
じゃダメなん? >>577
それでもいいんだろうけど、sleep に比べてこれといったメリットあるかな?
いや、ケチを付ける意図も無けりゃ sleep を推したいわけでもないんだけど、この場合の pthread_cond_timedwait は時間待ちをするだけの目的で使うんだよね? プロセスを都度起動でなく、常駐させる理由を書けば良いと思う >>578
時間指定じゃなくて時刻指定だから
用途に合ってると思ったわけだが 皆さんありがとうございます
>>576 案は実装ムズそう(KONAMI)
>>577 案をまず試してたい、と思っています >>584
うん、すごい
性能も悪いしバカみたいなことを得意げに語るところがw 例外処理っぽいことをやること自体が目的になってる感はあるな。
ある程度のところへ longjmp したら後は return でいいんじゃねーの?みたいな。
goto 使ってもいいしな。 >>585
longjmpが性能悪いわけねえだろ
悪いのはおまえの頭だ >>587
うんlongjmpの性能はたいして悪くないよ
多少悪くてもガンガン呼び出すわけじゃないだろうしね
悪いのはsetjmpとlongjmpの区別もついてない君の頭だと思うw なんでsetjmpとlongjmpの区別って話になるの? おまえ精神分裂病なのか? >>589
longjmpの性能とか言ってるのはお前だけ
妄想性障害かよw >>590
ああ、性能悪いってのはおまえが書くコードのことか
なるほど551でヘボぶりを露呈したやつだからな >>591
これまた意味不明なことを言い出したな
> longjmpが性能悪いわけねえだろ
はどうしたんだよw
あと前の話に噛み付くなら
>> C++の動きもわかってねえな
> 具体的に指摘しなよ
にもちゃんとレスしろよな >>592
人に教えを請う態度ではないな
乞食野郎 お前に教えを請う?w
> まあ出来ないから悪態しかつけないんだろうけど
って書いてあることも理解してないのかよ かすりもしない想像を開陳されても痛くも痒くもねえぜ プログラミングだけでなくプロファイリングもど下手くそだな
頭悪いやつは何やっても同じってことだな > longjmpが性能悪いわけねえだろ
って書いちゃって顔真っ赤になってはぐらかしに必死w 正しいことを言ったのに真っ赤になるわけねえだろアホ
もうテキトーこくしかなくなってやんのw longjmpが性能悪い?
どう悪いのか説明してみ
まあどうせまともな説明できないからまたごまかすんだろうけどw longjumpを使ってループとかしちゃうんじゃないの? 低きに流れて共に暴れる程度の度量もないのか。ケツの穴のセグメントの小さい奴らめ。 GNUのlsのソースで状態遷移を使ったパーサーがあった
なんか自分の知ってる技術が使われてると嬉しくなるな longjumpではなくlongjmpな
gccとclで結構違う
http://codepad.org/cm3uAblb インラインアセンブラで1バイト相対ジャンプ命令使ったとき、
128バイト以上離れても警告されなくて何度もバグったわ。
当時はデバッガー使ってなかったし。 流石にアセンブラソース部分のチェックはしてないと思うが アセンブラで条件分岐するにはジャンプは必ず使う
大抵の条件ジャンプ命令は相対ジャンプ ショートブランチの射程距離ぎりぎりを使うときはうっかりミスなどあり得ない
通常はそんなことになるまでにロングブランチに切り替えるが
それをあえてショートで責める理由があるときは細心の注意を払う インラインアセンブラを使うのはせいぜい数行
それより多かったり分岐を含むのは
インラインじゃない普通のアセンブラ
intrinsicで済むのはintrinsicで
ていう考え インラインアセンブラって何のために使うの?
パフォーマンス的にはコンパイラの最適化に任せておいた方がマシな場合が多そうだけど どうしても SIMD でその部分だけ実装したかった
あとから別のしくみがあることを知った >>614
コンパイラが吐かない命令使いたい時とかデータの特性がわかっててその特性に合わせた最適化したい時とか >>614
今時のCPUは最適化のためのルールが複雑で人の手に負えないからコンパイラ任せの方が大抵いいけど、昔はそうでもなかった。
まあそこまでキリキリにチューニングしたいならインラインアセンブラなんかじゃなくアセンブラで書く方がいいと思うけどね。
最適化以外だと、地味にローテートを多用するアルゴリズムだとアセンブラでやりたくなるよね。
他には、alloca とか longjmp とか効率のいい排他処理みたいな類いのアセンブラじゃないと書けない処理もあるし。 ウイルス作るのに必要
データを実行したり、投機実行を狙って特権の必要な命令を配置したり このスレのみなさんは逆汗したら判るんですか
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* cの関数の場合関数内でintを生成してそれに数値を代入してreturnして
戻った先で戻り値を使うことができる。そのままでdeleteする必要はない。
同じようにストラクチャでもできるの?
typedef strudt{ char x,y;] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
} int bitcount(int32 val){
ct = 0;
for(int i = 0; i < 32; ++ i){
if( val>>1)++ct;
}
return ct;
} int bitcount(int32 val){
ct = 0;
for(int i = 0; i < 32; ++ i){
if( val & 1) ++ct;
val >>=1;
}
return ct;
} >>622
先頭の pop ax で何が入ってくるのか分からなくて挫折したw
でもテキストな実行ファイルなら前にこんなの作ったよ。
https://dotup.org/uploda/dotup.org2114206.zip パスワード C
MSDOS用で 64bit windows上じゃ動かせないけど、DOSBOX とかで試せる。
C と関係無いしダウンロードしてまで見るのは面倒だと思うけど、見てもらえればちょっとは面白いかも。 >>624
a[i] = ( a[i] << 1) | ( a[i] >> 31);
って書いて普通にコンパイルしてみたが…
roll というのはローテート命令かい?
gcc で特に最適化は指定しなかったが。 >>626
できるよ。
正確には関数が持ってた構造体(funcのa)を戻り先の構造体(mainのxy)へ代入している感じ。
構造体はコンパイル時にサイズが決まるのでintとかの値と同じようにコピーができる。
https://wandbox.org/permlink/AIZ0DCmCSZJpFhE1 >>631
ほんとだ、シフト数を変数にしてもちゃんとローテートになるね。
すごいね。 >>633
ポインタで返さないなら、つまり関数内でメモリ確保したストラクチャでも値そのものを返すのであれば、受け取った側でdeleteしなくてもいいの?
typedef strudt{ char x[10000], y[10000];] XY;
XY func(){
XY a;
a.x =1; a.y = 2;
return a;
}
void main(){
XY xy = func();
} >>636
その a のためのメモリはスタックフレーム上に確保されてて、関数から return すると黙ってても消えて無くなる領域だから、
new とか malloc なんかでヒープ上に確保するメモリと違って delete とか free とかはいらない。
関数 func を呼び出してる間、xy の領域と a の領域は同時に存在し、return するときに a の内容を xy にコピーして、a は func のスタックフレームと共に消滅する。 int main(){
int a = 1;
return a;
}
これと一緒 うつりにけりなわが値
やがてすべてが過ぎ去るあとも
あなただけを想う >>638
なるほど!!よくわかりました。
関数はreturn値を呼び出し側にコピーして実行完了となりstackを開放する。
local 変数はstack上に作るので実行完了まではlocal変数の内容は保持される
が実行完了で自動的に消滅する。
ということですね。 常識過ぎてデフォルトコピーコンストラクタみたいな盲腸がC++に埋め込まれてしまったんだよ
あくまでC言語の中でコーダーが工夫し不便を乗り越えてた常識なのにね >人間の虫垂は、親知らずや体毛と同じように、かつては必要とされていたが今は
>なくても問題なくやっていける器官と考えられいた。
>しかし、虫垂がかつて何をしていたのか、また実際にいま用無しなのかについては、
>これまで明確になっていなかった。そんななか、米ミッドウェスタン大学の研究者が
>主体となった研究が発表され、この問題にひとつの答えが提示された。虫垂は、
>免疫細胞の反応を促し、有益な腸内細菌(善玉菌)が減少するとこれを増やすという
>二次的な免疫機能を担っているという。この役割は限定的な形ながら、いまも人間
>の体内で継続して機能している。
https://www.kagaku-kentei.jp/news_detail/data/355
むだなものなんて一つもない >>644
進化退化の結果、無駄になっちゃったものなら結構あるよね
ケツ毛とか、人差し指から小指までの腱間結合とか 虫垂炎で虫垂取っちゃった人はコロチャンに弱いってことかな >>645
環境が変化した場合に再度必要になるかも知れないのでなんとも言えない。
地球の自然環境は変化し続けるしね。 >>646
この世界全体が無駄と言えば無駄だな。
まあしかし人間は自分の欲望を満たすものに対して無駄がないと感じるだけのことなので、
欲望がなくなればそれもなり全てはあってもなくても良いどうでも良いものになる。 ■ このスレッドは過去ログ倉庫に格納されています