ストリーミング寺子屋
音声・動画のストリーミング機能を
開発するエンジニアのための
実践的なナレッジベース
【開発環境ほか-6】C/C++言語で、64bit環境上で動作するプログラムを作る際の技術的な注意点はありますか?
注意が必要なケース
一般的な変数の使い方をしている場合は問題になることはありませんが、以下のようなケースでは問題が発生する可能性があります。
- 通信プロトコルの送受信データやデバイスのレジスタ・アクセス等、データサイズ/位置が厳密に定義されているケースにおいてint/long等のデータモデルによってサイズが変わる型を利用した構造体定義を利用している場合
- ポインタ演算をポインタ型以外の変数(int等)を利用してオフセット計算している場合
- size_t型などで指定するC標準ライブラリ引数/返却値にint等を利用している場合
64bitバイナリの実行に対応したOS環境
64bitバイナリの実行に対応したOS環境は、一般的には64bitのWindows/Linux等があげられ、組込み向けにも対応した64bit OSが提供されているケースがあります。これらのOS上で動作するアプリケーションのソフトウェア開発では、64bit開発環境を利用することで、64bitバイナリが動作するようになります。
データモデル
64bit開発環境は大きくLLP64、ILP64、LP64のデータモデルが存在し、OSや利用するCPU、 開発環境毎にデータモデルが異なります。以下に代表的なデータモデルを示します。
- LP32 :intのサイズが16bit (あまり存在しない)
- ILP32 :一般的な32bit環境
- LLP64 :ポインタのみ64bit (Windows環境)
- LP64 :long変数/ポインタが64bit (Linux等UNIX系環境)
- ILP64 :int/long/pointerが64bit
変数型のサイズ
これらの64bit環境と32bit環境のデータモデルに対応する場合は、それぞれの変数型のサイズを注意する必要があります。特に32bit環境で作成したソフトウェアを64bit環境へ移植する場合は、従来から利用されている変数の型(char/int/short/long/long longやfloat/double/long double等)のサイズが意図したサイズとなっているかを確認する必要があります。
表1は、Windows(Visual Studio)とLinux(GCC)上の32bit開発環境および64bit開発環境における変数型のサイズを示しています。赤文字で記載されている箇所が32bit環境と64bit環境でサイズ変更がある変数型です。
C99では整数型変数としてサイズを指定した型定義が追加定義されました。これらを使用することで、32bit環境と64bit環境での型サイズの違いを防止することが可能となり、それぞれのデータモデルにおいて変数のサイズに統一性が期待できます。C99で追加定義された型定義名称を表2に示します。
新規にソフトウェア開発を行う場合は、積極的にサイズ固定型の変数を利用することで32bit環境および64bitの各データモデルへの対応が容易となります。
また、ポインタの演算を整数型変数で実施する場合は、ポインタサイズと連動して変数サイズが変化する“intptr_t”型を利用することで安全にポインタ演算を行うことが可能になります。
型定義 | Windows (Visual Studio) | Linux (GCC) | ||
---|---|---|---|---|
32bit (ILP32) | 64bit (LLP64) | 32bit (ILP32) | 64bit (LLP64) | |
bool | 8bit | 8bit | 8bit | 8bit |
char (unsigned char) | 8bit | 8bit | 8bit | 8bit |
short (unsigned short) | 16bit | 16bit | 16bit | 16bit |
int (unsignedint) | 32bit | 32bit | 32bit | 32bit |
long (unsigned long) | 32bit | 32bit | 32bit | 64bit |
long long (unsigned long long) | 64bit | 64bit | 64bit | 64bit |
float | 32bit | 32bit | 32bit | 32bit |
double | 64bit | 64bit | 64bit | 64bit |
long double | 64bit | 64bit | 96bit | 128bit |
size-t | 32bit | 64bit | 32bit | 64bit |
ポインタ | 32bit | 64bit | 32bit | 64bit |
型定義 | 32bit環境 | 64bit環境 |
---|---|---|
int8_t(unit8_t) | 8bit | 8bit |
int16_t(unit16_t) | 16bit | 16bit |
int32_t(unit32_t) | 32bit | 32bit |
int64_t(unit64_t) | 64bit | 64bit |
intptr_t | 32bit | 64bit |
Q&A
キーワード検索
-
ストリーミング技術
- 【Streaming-1】ストリーミングのシーケンスについて教えて下さい。
- 【Streaming-2】ストリーミング配信の遅延が大きいです。確認するポイントを教えて下さい。
- 【Streaming-3】ストリームの再生に失敗しました。確認するポイントを教えて下さい。
- 【Streaming-4】長時間配信時に画像の表示が滲みます。確認するポイントを教えて下さい。
- 【Streaming-5】画像が緑色で表示されます。確認するポイントを教えて下さい。
- 【Streaming-6】画像の一部しかきれいに表示されません。確認するポイントを教えて下さい。
- 【Streaming-7】ストリーミングデータは配信されているのに、映像が表示されません。確認するポイントを教えて下さい。
- 【Streaming-8】WebRTCを導入する際の技術的なポイントを教えて下さい。
- 【Streaming-9】Webブラウザでストリーミングを再生する手法を教えて下さい。
- 【Streaming-10】カメラで撮影した映像を確認するお勧めの環境はありますか。
- 【Streaming-11】ストリーミングの試験で注意すべきポイントを教えて下さい。
-
ネットワーク技術
- 【Network技術-1】QUICについて教えて下さい。
- 【Network技術-2】リアルタイム処理にUDPだけではなく、TCPも使われる理由を教えて下さい。
- 【Network技術-3】再送が保証されているTCPを使用しても、映像が乱れてしまう理由を教えて下さい。
- 【Network技術-4】TCPの通信ソケットが残り続けています。確認するポイントを教えて下さい。
- 【Network技術-5】サーバとの通信が断続的に途切れます。確認するポイントを教えて下さい。
- 【Network技術-6】TCP通信が zero window になり、継続できません。確認するポイントを教えて下さい。
- 【Network技術-7】TCP通信が断続的に途切れ、データがスムースに流れません。確認するポイントを教えて下さい。
- 【Network技術-8】TCPのデータ受信が、あるタイミングで極端に遅くなります。確認するポイントを教えて下さい・
- 【Network技術-9】SSL通信によるデータが受信出来ません。確認するポイントを教えて下さい。
- 【Network技術-10】ネットワーク品質の良し悪しを確認する、お勧めの方法はあります?。
-
ONVIF
- 【ONVIF-1】ONVIFのシーケンスについて教えて下さい。
- 【ONVIF-2】ONVIF Profileの種類と、どこまで対応すれば良いのか教えて下さい。
- 【ONVIF-3】ONVIF認証を取得したいです。最低限対応すべき機能、技術的な注意点はありますか?
- 【ONVIF-4】ONVIF準拠のカメラが接続できません。確認すべきポイントを教えて下さい。
- 【ONVIF-5】IPv6環境でONVIFは実現できますか?ONVIF準拠にIPv6は必要ですか?
- 【ONVIF-6】録画機能を持つカメラの録画データをONVIFで取得できますか?
- 【ONVIF-7】メタデータとカメラ映像を紐付けたいです。ONVIFでできますか?
- 【ONVIF-8】イベントをトリガーにカメラのPTZ操作、映像録画を行いたいです。ONVIFでできますか?
- 【ONVIF-9】指定時刻の前後N秒の映像を取得したいです。ONVIFでできますか?
- 【ONVIF-10】ONVIFで、YouTubeに映像をアップロードできますか?
-
NICE
- 【NICE-1】NICEとは何ですか?
- 【NICE-2】NICE Allianceが提供するクラウドサービスのサービス名を教えてください。
- 【NICE-3】NICE LA/ASに接続する際の技術的なポイントを教えて下さい。
- 【NICE-4】SceneDataはどのように作成されますか?
- 【NICE-5】SceneMark 作成の難易度はどれくらいですか?
- 【NICE-6】NICEの暗号化通信はどのような方法で行われますか。
- 【NICE-7】NICEを使用するにあたりCloud Serviceを自身で立てる必要は有りますか。
- 【NICE-8】NICEはカメラのストリーミングとして何をサポートしていますか?
- 【NICE-9】NICE Appはどのような機能を持っていますか?
- 【NICE-10】NICEに対応する際の技術的なポイントを教えて下さい。
-
開発環境ほか
製品情報
-
プロトコルスタック(ミドルウェア)
-
エンジニアリングサービス