ストリーミング寺子屋
音声・動画のストリーミング機能を
開発するエンジニアのための
実践的なナレッジベース
【開発環境ほか 1-9】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】ネットワーク品質の良し悪しを確認する、お勧めの方法はありますか?
- 【Network技術-11】EtherCATを使って時刻同期の精度を上げたいのですがポイントを教えてください。
-
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に映像をアップロードできますか?
-
クラウドサービス連携技術
-
開発環境ほか1
- 【開発環境ほか1-1】Wiresharkで独自プロトコルを解析することはできますか。
- 【開発環境ほか1-2】Wiresharkで、over HTTPのパケットを”HTTPを介したプロトコル”として解析する方法を教えて下さい。
- 【開発環境ほか1-3】WiresharkでRTPや独自フォーマットのストリーミングデータを解析する手法を教えて下さい。
- 【開発環境ほか1-4】暗号化されたデータをWiresharkで確認する方法はありますか?
- 【開発環境ほか 1-5】Dockerコンテナで実行しているアプリが落ちます。確認するポイントを教えて下さい。
- 【開発環境ほか 1-6】Webレンダリングエンジンを使用したアプリケーション開発について教えて下さい。
- 【開発環境ほか 1-7】RESTful APIについて教えて下さい。
- 【開発環境ほか 1-8】HTTPサーバを実装しました。お勧めの試験方法はありますか?
- 【開発環境ほか 1-9】C/C++言語で、64bit環境上で動作するプログラムを作る際の技術的な注意点はありますか?
-
開発環境ほか2
- 【開発環境ほか 2-1】YOCTOビルドする際、ハードディスク容量など、気を付けておく点はありますか。
- 【開発環境ほか 2-2】ARMコアをターゲットにする場合のYOCTOを始め方を教えて下さい。
- 【開発環境ほか 2-3】YOCTOのレシピにレイヤを追加する方法を教えて下さい。
- 【開発環境ほか 2-4】YOCTOの部分ビルドの方法を教えて下さい。
- 【開発環境ほか 2-5】YOCTOがビルドエラーになりました。対処方法を教えて下さい。
- 【開発環境ほか 2-6】開発中の製品と、PLCとの接続性をテストするため、ラズベリーパイもしくはWindows上のCODESYSでPLCを構築したいのですが、注意点はありますか?
-
生産現場の可視化
- 【生産現場の可視化-1】生産現場でカメラ映像を活用したいのですが、最初に気をつけるべきポイントは何ですか?
- 【生産現場の可視化-2】工場で不具合が発生する箇所に設置したカメラと、全体監視用のカメラの映像を簡単に見比べる方法はありますか?
- 【生産現場の可視化-3】製造現場で映像解析を実施したいのですが、既設の監視カメラを有効活用する方法はありますか?
- 【生産現場の可視化-4】生産現場の設備監視には、ドライブレコーダと監視カメラのどちらがいいでしょうか。
- 【生産現場の可視化-5】生産現場でAIを活用したいのですが、導入前に気をつけるポイントは何ですか?
- 【生産現場の可視化-6】PLCやセンサーをトリガーにしてカメラ映像を取得する方法はありますか?
- 【生産現場の可視化-7】GigEカメラ、USB3カメラ、ハイスピードカメラ、監視カメラなど、種類の異なる複数のカメラが取得した映像を関連付けて一元管理することは可能ですか?
- 【生産現場の可視化-8】フィールドバスにカメラをつなげて、PLCや機器と連携させる方法は?
- 【生産現場の可視化-9】既に導入済みの生産管理システムやSCADA、BIツールなどに、生産現場のネットワークカメラ映像を取り込みたいのですが、どのような方法がありますか?