No ケース 相違点ソウイテン 原因ゲンイン
1 浮動フドウ小数ショウスウテン例外レイガイ VEではサブノーマルスウ関連カンレンする例外レイガイ出力シュツリョクされません VEアーキテクチャはサブノーマルスウをサポートしないため
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環境カンキョウとの相違点ソウイテンカンしては"システムコールの相違点"のドキュメントに記載キサイしています。