No ケース 相違点ソウイテン 原因ゲンイン
1 浮動フドウ小数ショウスウ点テン例外レイガイ a) VEアーキテクチャでは非正規化数に関連する浮動小数点例外を発生させることができませんが、x86アーキテクチャでは発生ハッセイさせることができます。 VEアーキテクチャは非ヒ正規化セイキカ数スウをサポートしないため。
b) VEでは、四ヨン倍精度浮動小数点除算において丸めが発生しない場合でも、FE_INEXACT例外が発生します。 VE アーキテクチャでは、この場合に FE_INEXACT 例外の発生を抑制すると、除算のパフォーマンスが大幅に低下します。そのため、このような除算では FE_INEXACT 例外が生成されます。
c) 丸めモードが以下の場合、四ヨン倍精度浮動小数点除算の結果は数学的に正確な値から 1ULP ずれる可能性があります。
         (c-1) "負の無限大方向への丸め" (FE_DOWNWARD, RM)
         (c-2) "ゼロ方向への丸め" (FE_TOWARDZERO, RZ)
         (c-3) "正の無限大方向への丸め" (FE_UPWARD, RP)
VEアーキテクチャにおいて、浮動小数点除算の近似アルゴリズムは "最モットも近チカい偶数への丸め" (FE_TONEAREST, RN) という丸めモードに依存しているため、他の丸めモードでは数学的に厳密な精度は保証されません。
2 スレッドの最小サイショウスタックサイズ(PTHREAD_STACK_MIN) x86アーキテクチャでの最小スタックサイズが16KBですが、VEの最小スタックサイズは4MBです。  
3 pthread_attr_setstack()によるスレッドスタックの指定シテイ pthread_attr_setstackでスレッド属性オブジェクトの内部ナイブの値アタイを変更ヘンコウした場合バアイ、スタックオーバーフローが検出ケンシュツできなくなります。そのため、pthread_attr_setstack()は使用シヨウしないでください。スタックサイズを明示的メイジテキに変更ヘンコウしたい場合バアイ、pthread_attr_setstacksize()を使用シヨウしてください。pthread_attr_setstacksize()では上記ジョウキのような問題モンダイは発生ハッセイしません。
Linux Programmer's Manualには以下イカの記載キサイがあります。
 アプリケーションが pthread_attr_setstack() を利用する際には、 スタックの割り当てに責任を持つ必要がある。 pthread_attr_setguardsize(3) を使って設定された guard size の値は無視される。 必要と思われる場合は、アプリケーションが責任を持ってガード領域 (読み書 きが行われないように保護された 1 個かそれ以上のページ) の割り当てを行い、 スタックオーバーフローの可能性に対処するようにする必要がある。
一方イッポウ、VEOSの振フる舞マいは異コトなります。ユーザによってガード領域リョウイキが与アタえられたとしても、スタックはスタック領域リョウイキの限界ゲンカイを超コえて伸長シンチョウし、予期ヨキしない結果ケッカを招マネくことがあります。そのため、pthread_attr_setstack()は使用シヨウしないでください。
4 $ORIGIN変数ヘンスウ x86/Linux環境カンキョウではリンク時ジオプションのrpath 指定やdlopen()等で"$ORIGIN"を指定シテイした場合、プログラムや共有ライブラリがあるディレクトリに展開テンカイされますが、
VEでは環境カンキョウ変数ヘンスウ"VE_LD_ORIGIN_PATH"の値アタイが参照サンショウされます。
プログラム中チュウで"$ORIGIN"によりプログラムや共有ライブラリがあるディレクトリを指定シテイされる場合バアイ、あらかじめ対象タイショウのパスを環境カンキョウ変数ヘンスウ"VE_LD_ORIGIN_PATH"に設定セッテイしてください。
ve_execが引数ヒキスウとして"/proc/self/exe"を指定シテイしてreadlinkシステムコールをcallした場合バアイ、戻モドり値チはve_execのパスとなるため。
5 "ve_exec"または"execve()"からの"ld-linux-ve.so.1"の直接チョクセツ実行ジッコウ x86/Linux環境カンキョウではダイナミックリンカ"ld-linux-x86-64.so.2"をコマンドとして直接チョクセツ実行ジッコウすると引数ヒキスウに指定シテイされたx86バイナリをロードすることができますが、VEではダイナミックリンカをコマンドとして実行ジッコウすることはできません。  
6  "ldd"コマンド VE用ヨウ "ldd"コマンドは実行ジッコウバイナリの依存イゾンリストのみ表示ヒョウジし、共有キョウユウライブラリについては表示ヒョウジしません。対タイして、x86_64 の "ldd" は両方リョウホウの依存イゾンリストを表示ヒョウジします。 lddコマンドでは内部ナイブでダイナミックリンカを実行ジッコウしていますが、VEではダイナミックリンカの直接チョクセツ実行ジッコウはサポートされないため。(#5 参照サンショウ)
7 malloc()によるメモリアロケーションの最適化サイテキカ a) x86/Linux環境カンキョウではDEFAULT_MMAP_THRESHOLD_MAXマクロの値アタイは32MBに設定セッテイされていますが、VEでは1GBに設定セッテイされます。

malloc()はサイズによってsbrk()またはmmap()を用モチいてメモリ領域リョウイキを確保カクホしており、"mmap_threshold"より小チイさいサイズの領域リョウイキはsbrk()によって、それ以上イジョウのサイズの領域リョウイキはmmap()によって確保カクホします。
mmap()を使用シヨウした場合バアイにはページサイズ単位タンイでメモリが確保されますが、VEのページサイズは2MBまたは64MBと大オオきいため、x86/Linuxと同オナじ128kBの"mmap_threshold"ではページサイズに満ミたない領域リョウイキに対タイしてもmmap()が使用シヨウされ、メモリが無駄ムダに消費ショウヒされてしまうケースが多オオくなります。
メモリの利用リヨウ効率コウリツを高タカめるため、VEではDEFAULT_MMAP_THRESHOLDの値アタイを1GBに設定セッテイし、1GBより小チイさい領域リョウイキに対タイしてはsbrk()を用モチいてメモリを割ワり当アてるようにしています。
b) x86/Linux環境ではDEFAULT_MMAP_THRESHOLDマクロの値アタイは128kBに設定セッテイされていますが、VEでは1GBに設定セッテイされます。
c) x86/Linux環境ではmalloc()によって作成サクセイされるアリーナの最大サイダイ数スウは有効ユウコウコア数スウとなりますが、VEでは1に設定セッテイされます。 VEではHEAP_MAX_SIZEが2GBに設定セッテイされるため、malloc()によって作成サクセイされるアリーナのサイズも2GBとなります。
一方イッポウ、glibc malloc()は通常ツウジョウスレッド毎ゴトに独立ドクリツしたヒープ領域リョウイキを設定セッテイします。つまり、マルチスレッドのアプリケーションでは、スレッド内ナイでmalloc()をcallするとそれがどんなに小チイさい値アタイであったとしても2GBの領域リョウイキが確保カクホされてしまうこととなり、メモリの利用リヨウ効率コウリツが著イチジルしく低下テイカしてしまいます。
この問題モンダイを避サけるため、VEではmalloc()によって作成サクセイ可能カノウなアリーナの最大数1に設定セッテイしています。この結果ケッカ、VEではアリーナはプロセスに対タイして1つだけ作成サクセイされ、全スベてのスレッドで共用キョウヨウされます。
d) x86/Linux環境・LinuxカンキョウではHEAP_MAX_SIZEマクロの値アタイは64MBに設定セッテイされていますが、VEでは2GBに設定セッテイされます。 Glibcでは、HEAP_MAX_SIZEは通常ツウジョウDEFAULT_MMAP_THRESHOLD_MAXの2倍バイの値アタイに設定セッテイされるため。
8 システム環境カンキョウ変数ヘンスウの名前ナマエ a) VEでは、mallopt()に関連カンレンする環境カンキョウ変数ヘンスウ(MALLOC_xxx)に"VE_"プリフィックスが必要ヒツヨウです。例レイ) MALLOC_ARENA_TEST変数ヘンスウをVE向ムけに設定セッテイする場合バアイには、VE_MALLOC_ARENA_TESTを設定セッテイしてください。

"VE_"を付加フカする対象タイショウは以下イカの環境カンキョウ変数ヘンスウです。
VE_MALLOC_ARENA_MAX
VE_MALLOC_ARENA_TEST
VE_MALLOC_CHECK_
VE_MALLOC_MMAP_MAX_
VE_MALLOC_MMAP_THRESHOLD_
VE_MALLOC_PERTURB_
VE_MALLOC_TRIM_THRESHOLD_
VE_MALLOC_TOP_PAD_
VE向ムけプロセスとVH(x86)向ムけプロセスで異コトなる環境カンキョウ変数ヘンスウの値アタイを設定セッテイできるようにするため
b) VEでは、memusageコマンドに関連する環境変数(MEMUSAGE_xxx)に"VE_"プリフィックスが必要です。例) MALLOC_ARENA_TEST変数をVE向けに設定する場合には、VE_MALLOC_ARENA_TESTを設定してください。

"VE_"を付加する対象は以下の環境変数です。
VE_MEMUSAGE_PROG_NAME
VE_MEMUSAGE_OUTPUT
VE_MEMUSAGE_BUFFER_SIZE
VE_MEMUSAGE_NO_TIMER
VE_MEMUSAGE_TRACE_MMAP
c) VEでは、以下イカの環境変数に"VE_"プリフィックスが必要です。
VE_LD_WARN
VE_LD_DEBUG
VE_LD_AUDIT
VE_LD_VERBOSE
VE_LD_PRELOAD
VE_LD_PROFILE
VE_LD_BIND_NOW
VE_LD_BIND_NOT
VE_LD_SHOW_AUXV
VE_LD_HWCAP_MASK
VE_LD_ORIGIN_PATH
VE_LD_LIBRARY_PATH
VE_LD_DEBUG_OUTPUT
VE_LD_DYNAMIC_WEAK
VE_LD_USE_LOAD_BIAS
VE_LD_POINTER_GUARD
VE_LD_PROFILE_OUTPUT
VE_LD_TRACE_PRELINKING
VE_LD_TRACE_LOADED_OBJECTS
VE_GCONV_PATH
VE_GETTEXT_LOG_UNTRANSLATED
VE_LANGUAGE
VE_OUTPUT_CHARSET
VE_LOCPATH
VE_I18NPATH
VE_GETCONF_DIR
VE_SOTRUSS_FROMLIST
VE_SOTRUSS_EXIT
VE_SOTRUSS_WHICH
VE_SOTRUSS_OUTNAME
VE_SOTRUSS_TOLIST
VE_MALLOC_TRACE
VE_MALLOC_CHECK_
9 プロファイリング 1.プロファイリング対象タイショウのコンテキストスイッチ等ナドでVEプロセスの動作ドウサが一時イチジ中断チュウダンされた場合バアイ、実行ジッコウ時間ジカンが正確セイカクに測定ソクテイできません。
2. gprofによるプロファイリングを行オコナう際サイ、SIGALRMは使用シヨウすることができません。
通常ツウジョウ、gprofはsetitimer()をITIMER_PROFフラグと共トモにcallしますが、VEはITIMER_PROFをサポートしないため、ITIMER_REALフラグと共トモにをcallします。
setitimer()の詳細ショウサイに関カンしては、”システムコールの相違点ソウイテン”ドキュメントを参照サンショウください。
10 system() API VE では、VE プログラムの中ナカでセット/クリアした環境カンキョウ変数ヘンスウは、system() APIによって起動キドウされた子コプロセスに引ヒき継ツがれません。
シナリオ:ユーザがコマンドプロンプトで環境カンキョウ変数ヘンスウを設定セッテイ(export)したとします。system() で起動キドウした子コプロセスが環境カンキョウ変数ヘンスウ使ツカうことを意図イトして、子コプロセスをsystem()で実行ジッコウする前に、メインプログラムがその環境カンキョウ変数ヘンスウを unsetenv を用モチいてクリアします。
このシナリオでは、コマンドプロンプトで設定された環境変数が、子プロセスから
見えます。
VE プロセスの system() 要求ヨウキュウは VEOS ではなく、VH OS (Linux) によって実行ジッコウされます。VE 内ナイでの環境カンキョウ変数ヘンスウの更新コウシンは VH の環境カンキョウに反映ハンエイされていないため、子コプロセスは変更ヘンコウを引ヒき継ツぎません。
11 system() API VEのアーキテクチャにおいて、VEプロセスが新しいVEプログラムをロードして実行するためにsystem() APIを呼び出すとき、新しく作られたVEタスクの全てのシグナルハンドラは、SIG_DFLにリセットされます。 VE用ヨウのsystem() APIは新アタラしいVHプロセスを作成サクセイします。この新しく作られたVHプロセスは、VEのバイナリを引数としてVHのexecve()を呼び出すことで、新しいVEのバイナリをロードし、実行ジッコウします。これはつまり、新しいVEのバイナリをロードするためにve_execを呼び出すことになります。 
ve_execのVEOSへのリクエストは、system() APIにより呼び出されたVEプロセスとの親子関係を持たない新しいVEプロセスを作ることになります。そのため、新しく作られたプロセスの全てのシグナルハンドラのルーチンはSIG_DFLにリセットされます。
12 pthread_detach( ) API pthread_join() ですでに合流ゴウリュウされたスレッドをデタッチした場合バアイ、未定義ミテイギな動作ドウサとなります。 VE では、pthread_join() により既スデに合流ゴウリュウされたスレッドに対タイして、続ツヅけて pthread_detach() でデタッチした場合バアイの動作ドウサは未定義ミテイギな動作ドウサとなります。
これは、pthread_join() が呼ヨび出ダされた時点ジテンで、pthread 構造体コウゾウタイが解放カイホウされているためです。しかし、VH の glibc はキャッシュを保持ホジしており、いくつかの要因によりスレッド ID を保持ホジしている場合バアイがあります。そのため、VH の glibc は、pthread_join() により既に合流されたスレッドに対して pthread_detach() でデタッチした場合にエラーを返カエすことがあります。
備考ビコウ
システムコールに関カンするx86/Linux環境カンキョウとの相違点ソウイテンに関カンしては"システムコールの相違点"のドキュメントに記載キサイしています。