HAMLOG開発室は、HAMLOGに関連したプログラム開発(C、パスカル、VB言語等、又はDLL)についての
専用BBSです。プログラム言語に関する投稿以外は通常のHAMLOG相談室に投稿して下さい。
HAMLOG開発室BBS

memcpy() 投稿者:JG1MOU浜田

HAMLOG50.DLLからのエラーでは、コンパイラの最適化によりmemcpy関数
からエラーが出ているような気がしまして、気のせいかもしれません
けど、memcpy()をまったく使わないようにしてみました。
メモリブロックをコピーする関数です。

DOS版のときは、Cのソースコードにアセンブラのストリング命令を
入れて、一気にコピーしていたのですが・・・
 asm sub si, ax
 asm sub di, ax
 asm shr cx, 1
 asm rep movsw  ・・・みたいな・・・

今の32ビットコンパイラでは、別途アセンブラを用意しなければ
ならないので、インラインアセンブラが使えません。

そこで、DWORDにキャストして4バイトずつコピーしてやれば少し速い
かなぁーなんて。 次のように・・・
void __fastcall StrLCopy(char *dest, const char *src, int Count)

{ while (Count >= sizeof(DWORD)) 
{  *(DWORD *)dest = *(DWORD *)src; // 4バイトコピー
  dest += sizeof(DWORD);
  src += sizeof(DWORD);
  Count -= sizeof(DWORD);
 }
 while (Count > 0) { // 残り3バイト以下
  *dest++ = *src++;
  Count--;
 }
 *dest = (char)0x00;}



結果、一億回ほどループさせて呼び出してみると、少し速いような気が
しました。
ま、エラーが出なくなれば、それでよろし。
http://hamlog.no.coocan.jp/mou/index.html

以上、晩酌プログラミングでした。Hi

2017/11/04(Sat) 19:22:39  [No.830]


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)
- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
Call 名前 ※必須
文字色
Eメール
タイトル sage
URL
メッセージ 手動改行 強制改行 図表モード
メッセージには上記と同じURLを書き込まないで下さい
画像File  (130kBまで)
暗証キー (英数字で8文字以内)
投稿キー (投稿時 投稿キー を入力してください)
プレビュー