バイト数について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
イマダニ
記事: 145
登録日時: 7年前

バイト数について

#1

投稿記事 by イマダニ » 6年前

こんにちは、今現在タスクシステムを学習しているイマダニです。

タスクシステムの基本的なことを以下のサイトで大体理解し、

本格的なシューティングゲームを実現するタスクシステム
http://codezine.jp/article/detail/297

シューティングを作ってみたのですがどうしても一つだけわからないことがあります。

まずここの解説では、

①まずタスクシステムのためのメモリ領域を確保。

②タスクを生成・追加したら①で確保した領域の一部を使わせる。

③タスクを削除する時はリストから除外するだけで実際にはその分のメモリ解放は行わない。

④それで①のメモリ領域の残量が少なくなって来たら、デフラグ(③の削除したタスクの分を解放する。)

といった流れでメモリを扱うと説明してます。

それでまあ大体仕組みは理解でき、扱えたのですが、

ここの解説の2ページ目のサンプルコードに①のメモリ領域の確保で、
実際どのくらいのバイト数のメモリ領域を確保するか、書いてあったのですが、

コード:

#include"TaskSystem.h"

#define MEM_SIZE  10240    // メモリ領域のバイト数 /*←①のメモリ領域バイト数*/

#define DFRG_SIZE   256    // 未使用領域がこのバイト数未満になったら
                           // デフラグ

static BYTE *g_buf=NULL;   // メモリ領域の先頭を指すポインタ

BYTE* Task::m_active=NULL; // 最初に実行するタスクを指すポインタ
BYTE* Task::m_free=NULL;   // 新しいタスクを追加する未使用領域の
                           // 先頭を指すポインタ

static DWORD g_size=0;     // 使用中のタスクに割り当てているバイト数
static DWORD g_count=0;    // 使用中のタスク数

// タスクリストの初期化
void Task::InitTaskList(void)
{
    ReleaseTaskList();

    g_buf=(BYTE*)malloc(MEM_SIZE); // メモリ領域の確保 /*←①の確保*/
    memset(g_buf,0,MEM_SIZE);

    m_active=NULL;
    m_free=g_buf;

    g_size=0;
    g_count=0;
}
#define MEM_SIZE 10240

なんで10240なんでしょう?

10240の領域を用意して、その一部を追加したタスクに割り当てるのはわかるのですが、
そもそもなんで10240なんでしょう?

そこがどうしてもわかりません。

一つのタスクに使われるバイト数はたぶんこれくらいだから、
10240くらい用意しとけばいいだろうといったような
筆者の経験からくるものなのか?

それともなんらかの決まりからくるものなのか?

それとも筆者が考えなしに適当に決めたものなのか?(←これはさすがにないと思う)

わかりません。

よろしければアドバイスお願いします。

アバター
usao
記事: 1574
登録日時: 7年前

Re: バイト数について

#2

投稿記事 by usao » 6年前

記事の読み手側としては
「何で10240という値なの? 9800じゃダメなんですか?」みたいなことについて考える必要は特に無いように思います.
必要なのはその値の役割(というか何の値なの?ってこと)を理解することで,
自分が作るものにおいて必要十分な容量を用意しさえすれば.

ISLe
記事: 2646
登録日時: 9年前
連絡を取る:

Re: バイト数について

#3

投稿記事 by ISLe » 6年前

考え無しかどうかは分かりませんが、10KBという数値を切りが良いと思ったのでしょう。

ところでそこのページは、警告を無理矢理抑えこむなど危険な行為が目立ちます。
はっきり言ってコードだけでなくいろいろととても危険なので注意してください。

言語処理系が用意している正式な方法を使って、同じものを安全に実装できます。

イマダニ
記事: 145
登録日時: 7年前

Re: バイト数について

#4

投稿記事 by イマダニ » 6年前

イマダニ さんが書きました:こんにちは、今現在タスクシステムを学習しているイマダニです。

タスクシステムの基本的なことを以下のサイトで大体理解し、

本格的なシューティングゲームを実現するタスクシステム
http://codezine.jp/article/detail/297

シューティングを作ってみたのですがどうしても一つだけわからないことがあります。

まずここの解説では、

①まずタスクシステムのためのメモリ領域を確保。

②タスクを生成・追加したら①で確保した領域の一部を使わせる。

③タスクを削除する時はリストから除外するだけで実際にはその分のメモリ解放は行わない。

④それで①のメモリ領域の残量が少なくなって来たら、デフラグ(③の削除したタスクの分を解放する。)

といった流れでメモリを扱うと説明してます。

それでまあ大体仕組みは理解でき、扱えたのですが、

ここの解説の2ページ目のサンプルコードに①のメモリ領域の確保で、
実際どのくらいのバイト数のメモリ領域を確保するか、書いてあったのですが、

コード:

#include"TaskSystem.h"

#define MEM_SIZE  10240    // メモリ領域のバイト数 /*←①のメモリ領域バイト数*/

#define DFRG_SIZE   256    // 未使用領域がこのバイト数未満になったら
                           // デフラグ

static BYTE *g_buf=NULL;   // メモリ領域の先頭を指すポインタ

BYTE* Task::m_active=NULL; // 最初に実行するタスクを指すポインタ
BYTE* Task::m_free=NULL;   // 新しいタスクを追加する未使用領域の
                           // 先頭を指すポインタ

static DWORD g_size=0;     // 使用中のタスクに割り当てているバイト数
static DWORD g_count=0;    // 使用中のタスク数

// タスクリストの初期化
void Task::InitTaskList(void)
{
    ReleaseTaskList();

    g_buf=(BYTE*)malloc(MEM_SIZE); // メモリ領域の確保 /*←①の確保*/
    memset(g_buf,0,MEM_SIZE);

    m_active=NULL;
    m_free=g_buf;

    g_size=0;
    g_count=0;
}
#define MEM_SIZE 10240

なんで10240なんでしょう?

10240の領域を用意して、その一部を追加したタスクに割り当てるのはわかるのですが、
そもそもなんで10240なんでしょう?

そこがどうしてもわかりません。

一つのタスクに使われるバイト数はたぶんこれくらいだから、
10240くらい用意しとけばいいだろうといったような
筆者の経験からくるものなのか?

それともなんらかの決まりからくるものなのか?

それとも筆者が考えなしに適当に決めたものなのか?(←さすがにこれではないと思う)

わかりません。

よろしければアドバイスお願いします。

イマダニ
記事: 145
登録日時: 7年前

Re: バイト数について

#5

投稿記事 by イマダニ » 6年前

間違えて同じ事をしてしまいました。
>>usaoさん
そんなに気にする事でもないんですね。
アドバイスありがとうございます。

>>ISLeさん
やっぱり危ないですか。
色々なサイトをみて、学んだうえで、タスクシステムを作るつもりで、これをこのまま使う気はもとよりなかったのですが、
危険信号を出してもらえるのは助かります。まだなにが危ないかはっきり判断できる自信がないので……

お二方今回はありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る