[過去ログ]
C#, C♯, C#相談室 Part96 (1002レス)
C#, C♯, C#相談室 Part96 http://mevius.5ch.net/test/read.cgi/tech/1639965805/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
139: デフォルトの名無しさん (ワッチョイ ed2f-lWiN) [sage] 2022/03/15(火) 18:57:03.19 ID:BlmPXv890 そもそも現在のポインタ値がヌル参照からのオフセットだって保証されてるのか? http://mevius.5ch.net/test/read.cgi/tech/1639965805/139
143: デフォルトの名無しさん (ワッチョイ a236-8qwV) [sage] 2022/03/15(火) 21:23:35.68 ID:uT8cdwkS0 皆様、返信どうもありがとうございます。 いただいたアドバイスを元に色々と確認をしていて反応が遅くなってしまいました。 申し訳ありません。 >>138 確認してみた所、C# では int は 32 ビットと決められているようです。 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/builtin-types/integral-numeric-types ただ、可読性を考えると 4 ではなく sizeof(int) と書くべきでした。 ご指摘どうもありがとうございました。 >>139 Unsafe.NullRef<T>() と Marshal.ReadInt32(int) の実装を確認してみたところ、 おそらくその点は問題ないかと思います。 https://github.com/dotnet/corert/blob/master/src/System.Private.CoreLib/shared/Internal/Runtime/CompilerServices/Unsafe.cs https://github.com/dotnet/corert/blob/master/src/System.Private.CoreLib/shared/System/Runtime/InteropServices/Marshal.cs しかし、問題の原因は大抵こういう思い込みに隠れているものだと思うので、 可能性を一つ潰すことができてとても助かりました。 >>140 そうなんですよね。 for (int i = 0; i < 0; i++) {} は i++ に到達しないのは明らかだから 最適化でまるっと消えてしまうかと思っていたので、この結果には驚きました。 >>141 書いていただいたコードを試してみたところ、確かに最適化が有効でも期待通りの動作になりました。 それからもう一つ、書いていただいたコードを使わない場合、 プラットフォームが x86 と x64 の両方とも最適化有効時には期待通りの動作をしないことが分かりました。 (x86 の場合は常に期待通りに動作するならば問題の原因について一つ仮説が立てられるかと思ったのですが、 実際は違っていたので未だに原因はさっぱり見当がついていません…) http://mevius.5ch.net/test/read.cgi/tech/1639965805/143
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.038s