• 締切済み

今どきの名前設定方法

昔は、いかに高速化するために、文字を少なくしよう、という方法とかもあったのですが・・・ Windows NT あたりから Administrator という長いユーザー名 Windows 95あたりから Program Files Windows 2000あたりから Documents and Settings とかいう長いフォルダ名が使われています。 LFNとかいうのは別としても Admin Program Home とかいう名前にしたほうのが、特にディレクトリのアクセスがちょっとでも(数ステートでも)高速化するのに なぜ、しないのでしょうか? 宜しくお願いします。

みんなの回答

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.10

>あまり多く文字列比較系のアルゴリズムは、実際にOSのソースを見ても >あんまり変わってないな・・という気もしますが >どうでしょうか? どのOSのソースを見られてるのかわかりませんが文字列比較のアルゴリズは変わりようがありません。 ですが特定のファイルやディレクトリにたどり着く分には、その文字列比較そのものの回数を減らすような仕組みになっています(先にも書きましたがstrstrなんかではありません)。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.9

strlen の「アルゴリズム」に, そんなに「素晴らしすぎる」ものってありましたっけ? しょせん「'\0' まで 1個ずつ数える」しか方法はないはずなんだけど. あと, 文字列探索についていえば「効率的なアルゴリズム」はあるものの現実的にはあまり性能向上に寄与しません. 普通にありそうな状況では, 単純なアルゴリズムで十分だったりします.

ymda
質問者

お礼

本当に単純なアルゴリズムだけで、いいのか?という前に 普通に、L1キャッシュにヒットしやすくするために 短い名前にしたほうが、良いとも考えてしまいます。

回答No.8

8ビット、クロック 2MHz、論理演算のみ、変数は A-Z、 この時代は、機械語でないと満足な速度が出ませんでした。 そのプログラマが上司になって、昔の苦労は不要だった。 ソフト開発は、バグ退治に明け暮れるようになって、 バグが出ないようにする工夫が優先されました。 メモリ量や速さは、ハード任せにしたのです。

ymda
質問者

お礼

再びですが・・・ いくら、L1キャッシュの中で動いているであろうとも、 ノイマン型のCPUは、1つの命令を順番に実行していくに 過ぎないはずです。 CPUの高速化は、それらの制限の中から、より高速に動作させるために キャッシュを付けてみたり、パイプラインにしてみたり、分岐予測を (HWかSoftwareで)つけてみたりと、いろいろあるはずですが、 今回の質問で、Z80の命令で言えば LDI を例に出してしまいましたが LDI LDI LDI と、 :label LDI JR label jr label のどっちが速いかという問いに対して、 想定外の答えがでてきました。 LDIR です。(無論知ってますが) 確かに、一気に比較する命令もありますが、 結局、文字列比較で、C言語が使っているのは (FreeBSDのソースより抜粋) 今でも、大してアルゴリズムが変わっていない #include <sys/cdefs.h> __FBSDID("$FreeBSD: releng/10.0/lib/libc/string/strcmp.c 251069 2013-05-28 20:57:40Z emaste $"); #include <string.h> /* * Compare strings. */ int strcmp(const char *s1, const char *s2) { while (*s1 == *s2++) if (*s1++ == '\0') return (0); return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1)); } に過ぎないのです (FreeBSDより抜粋) CPUとの命令の組み合わせで、もっと確かに工夫できる部分はあるのですが、 現時点で、この関数を実行している以上、ディレクトリやファイル名は (特にキャッシュにある情態で)アクセスが遅くなるとしか うちとしては、これ以外に理解できません。 みなさんありがとうございました。 #確かに、4GHzのCPUもってますが、オーバークロックしても、遅くて遅くて仕方ありません。。

回答No.7

マイクロソフトなどの、プログラマー集団の中で、 自分のアーキテクチャを採用してもらうために、 少しでも早く、内容をイメージさせようとしたのでは? また コード量=収入 みたいな風習があるので名前も長くしてしまえ、 と考えた愚か者がいたんでは?

ymda
質問者

補足

ありがとうございます。 (Vistaと比べたら別ですが) Windows 8 にすれば、Windows 7 より高速化する!という いわゆる宣伝みたいなことはありました。 実際、これは起動速度のみであって、 半ばチートしているようなものでしょう。 ですが、実際にWindows 8 にして、アプリケーションの実行速度は若干低下しています。 (ベンチマークをとれば、すぐに目にわかるぐらいです) 特に、XPから7あたり(8でも構いません)にアップロードすれば 7は速いんだな!って思われがちでしょう。 しかし、実際は、メモリを大食いして、実行速度はほとんどの環境で若干、または、メモリがぎりぎりであれば、めちゃくちゃ遅くなってしまうわけです。 こういうのは、陰謀になってしまうのでしょうか? #ただ、Win7 ProにあるVIrtual PCより、Win8にあるクライアントHyper-Vのが、格段に高速化しているのは認めます。。。 そういう意味では、SoftEtherってVPNは、とても素晴らしいとも、考えられてしまうんですよね。。 https://ja.softether.org/

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.6

> 実際に、C:\Users\(username) を D:\Home にしただけでも、 > ごくわずかに (FX-8350 + SSD)で、快適になったというぐらいのもあります。 これは、パスの長さよりも、 CとDにドライブを分けたことの方が効いています。 ドライブ毎にキャッシュがあれば、システムドライブは頻繁にアクセスがあるからキャッシュがあまり有効ではないのに比べて、必要なデータしか読み書きしないドライブではキャッシュが有効に働きますから。 > たとえ、1,000,000,000分の1秒・・であっても、それが > 複数回あれば・・・ > 0.01秒にもなりえるわけです。 0.01秒=100分の1秒ですから、計算すれば 10,000,000 回比較したら、0.01秒の差として表われる、ということになります。 これを「複数回あれば」と言えるほどの数かどうか。 たとえば、1秒に1000回アクセスがあったとすると、10,000秒(≒2.78時間)で0.01秒の短縮です。 フィルダ名「Documents」を一文字減らすにはどうすればいいだろう?と1秒考えたら、その効果が出るのは278時間後です。 > 例えば、Z80命令でいってしまうと Z80を持ち出してはいけません。CPUの作り方がまったく違います。 今どきのCPUでは「XXステートで総クロック数がXXだから実行時間はXX」などと簡単に机上の計算ができるようなものではありません。 今風にZ80を作ったのなら、LDIを100個並べるよりも、「速い」命令を組合せたプログラムを作るよりも、LDIR にする方が格段に速いでしょう。 あと。 文字列の比較、階層化されたデイレクトリへのアクセスなどは、アルゴリズムが研究されており、文字列の長さでアクセスが大きく違うようなことは無いように工夫されています。

ymda
質問者

お礼

ありがとうございます。 strlen のアルゴリズムは、素晴らしすぎるのもあるのですが、 あまり多く文字列比較系のアルゴリズムは、実際にOSのソースを見ても あんまり変わってないな・・という気もしますが どうでしょうか?

ymda
質問者

補足

再びですが・・・ いくら、L1キャッシュの中で動いているであろうとも、 ノイマン型のCPUは、1つの命令を順番に実行していくに 過ぎないはずです。 CPUの高速化は、それらの制限の中から、より高速に動作させるために キャッシュを付けてみたり、パイプラインにしてみたり、分岐予測を (HWかSoftwareで)つけてみたりと、いろいろあるはずですが、 今回の質問で、Z80の命令で言えば LDI を例に出してしまいましたが LDI LDI LDI と、 :label LDI JR label jr label のどっちが速いかという問いに対して、 想定外の答えがでてきました。 LDIR です。(無論知ってますが) 確かに、一気に比較する命令もありますが、 結局、文字列比較で、C言語が使っているのは (FreeBSDのソースより抜粋) 今でも、大してアルゴリズムが変わっていない #include <sys/cdefs.h> __FBSDID("$FreeBSD: releng/10.0/lib/libc/string/strcmp.c 251069 2013-05-28 20:57:40Z emaste $"); #include <string.h> /* * Compare strings. */ int strcmp(const char *s1, const char *s2) { while (*s1 == *s2++) if (*s1++ == '\0') return (0); return (*(const unsigned char *)s1 - *(const unsigned char *)(s2 - 1)); } に過ぎないのです (FreeBSDより抜粋) CPUとの命令の組み合わせで、もっと確かに工夫できる部分はあるのですが、 現時点で、この関数を実行している以上、ディレクトリやファイル名は (特にキャッシュにある情態で)アクセスが遅くなるとしか うちとしては、これ以外に理解できません。 みなさんありがとうございました。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.5

>うーん、非常に多数のファイルをオープンすると、 >やはり変わるんですよね。(特にサーバーで) どういうファイルのアクセスの仕方をされてるのかわかりませんが 一度オープンしてファイルハンドルを取得したファイルは、ファイルパスの操作をする事はないです。 オープン・クローズを繰り返してるとかいうなら話は変わりますが。 またWindowsNT系で採用されてるNTFSはB+Treeをベースとした木構造でファイルを管理してますので単純にstrstr相当でファイルを探してるとかではないです。 で・・・これいったいC,C++といったい何の関係が・・・

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.4

>実際に、C:\Users\(username) を D:\Home にしただけでも、 >ごくわずかに (FX-8350 + SSD)で、快適になったというぐらいのもあります。 WindowsのCドライブはほっといても頻繁にアクセスされてるので、 CrystalDiskMarkなどのストレージベンチマークやってもふつうに遅いですよ。

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.3

ファイル名が短くなって高速化するのって最初のファイルオープンぐらいしかないですけど。 それに文字数少なくは高速化というよりストレージやメモリの節約の側面の方が強かったような。

ymda
質問者

お礼

うーん、非常に多数のファイルをオープンすると、 やはり変わるんですよね。(特にサーバーで) 確かに、ストレージやメモリの節約もあるにはあるのですが、キャッシュに収まるだけでも、結構違いますからね。 memtest86+のインチキベンチでも、違いがあるぐらいですし

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

ディレクトリ名については、Windowsの文化とも言うべきものです。 UnixやLinuxでは、bin home 等の従来からの短めなディレクトリ名、アカウント名を使う文化を受け継いでいます。 ディスクアクセスは ・ある程度まとめたブロック単位でアクセスする ・途中にキャッシュ等が入る 等で、数バイト短くした程度では速度に影響ありません。 CPUは、いまや1GHz越えが普通です。 1文字比較に1命令として、1文字比較を減らしたら、短くなるのは 1,000,000,000分の1秒です。 数m秒オーダーのディスクアクセスに比べたら、無視できる時間です。 短くすることでほとんど効果が無いのなら、人間が解りやすいように長い名前を使う、というのも、思想としては有りなのではないでしょうか。

ymda
質問者

お礼

ありがとうございます。 たとえ、1,000,000,000分の1秒・・であっても、それが 複数回あれば・・・ 0.01秒にもなりえるわけです。 ディスクアクセス自体は、ブロックで(厳密にはDMAで)転送されていても 実際のディレクトリの比較は、strstr相当なはずです。 C:\Program = C:\Program であるか?ってのを わずか1ステートで判別できる命令は、今でもないはずです。 (SSEで確かに速くはなりますが、限界はあります) また、ディスクアクセスがなくても、メモリ上でディレクトリやファイル名の比較等はあるわけですのですので・・・ Windows の場合、レジストリのデータベースは、ある程度メモリにキャッシュされるはずです。 更にCPUにキャッシュされれば、更に高速化されるわけですので キャッシュにヒットするだけでも、strstr をする時間が、短くなるはずです。 爆速なL1キャッシュなんて、未だに8kbytesだか16kbytesとか64kbytesとか (各コアあたり)しかないわけですしね。

ymda
質問者

補足

補足欄ですみません・・・ 例えば、Z80命令でいってしまうと・・・・ですが LDIR という、ブロック転送する命令があります。 しかし、これは、回数がわかっていれば LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI LDI (荒らしみたくなってすみません) のが、はやくなるはずです。 しかし、同じ、回数がわかっていたとしても 64kbytesのL1 Cキャッシュであれば (LDIは2バイトですので) LDI を32768回超えると、キャッシュミスが発生するはずです。 もし、それだけの回数をやるのであれば 普通に XOR A DEC A :label1 EX AF,AF' XOR A DEC A :label2 LDI DEC A JR Z,label2 EX AF,AF' DEC A JR Z,label1 .... とやれば、L1キャッシュに超余裕で収まるので、はやくなるとも考えられます http://www.systemax.jp/doc/Z80_inst.html#inst_incdec ※Z80の場合、16bit加減算の場合、比較してもフラグが立たないので、こう組むはずです ※実際のZ80にはキャッシュがありませんが、R800には、メモリの256バイトの境界というものがありました。これだけで、結構動作速度が変わります。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

それが使い物にならないくらい遅くなるのならともかく、数ステート程度では利用者が認識できるレベルではなくなるくらいコンピューターの性能が上がったためでしょう。 そういう状態の現状では 高速化 < 利用者に対しての分かりやすさ とするのは自然の流れでしょう。

ymda
質問者

お礼

ありがとうございます。 うちの場合、・・・うーん、頭の回転が速いせいでしょうか? それでも遅く感じてしまいます。 実際に、C:\Users\(username) を D:\Home にしただけでも、 ごくわずかに (FX-8350 + SSD)で、快適になったというぐらいのもあります。

関連するQ&A

  • windows2000でDocument and setting フォルダがの中身がユーザー名と不一致

    windows2000 sp2 を使っています。 先週、Windows2000をAdministrator権限があるユーザ(仮に、”admin_user” とする)で起動時にログインしたところ デスクトップやMyDocumentの中身が空っぽになっていました。 データがすべて消えたのかと思ったのですが。 c:\document and settings\admin_user の中には前回の起動までに保存したデータがすべてありました。 しかし、デスクトップには何もでません。 さらに、よくみてみると c:\document and settings\admin_user.MACHINE (→最後に.MACHINE というのが付け加えられたフォルダを発見) というフォルダができていて、どうやら、起動したあとはc:\document and settings\admin_user.MACHINE というフォルダの設定を読み込んでいるようです。 これでは困るので、別のAdministrator権限でログインしなおし c:\document and settings\admin_user.MACHINE のフォルダを削除したあと、admin_user でログインしたのですがやはり、c:\document and settings\admin_user.MACHINE のフォルダが勝手につくられてしまい、どうにもなりません。 困ったので、c:\document and settings\admin_user(→本来の設定が入っているフォルダ)をc:\document and settings\admin_user.MACHINE という名前に変更して起動すると、設定やデスクトップ、マイドキュメントなどはもどったのですが、LHASAなどの解凍ソフトでファイルを解凍したときに、c:\document and settings\admin_user のディレクトリにでてきてしまい。非常に使用困難な状態となっています。 原因や復旧方法がわかりません。 回答お願いします。

  • 削除できないインターネットTEMPファイル

    WindowsXP_sp2 IE6.0.2 ・インターネットサーフィン後  ツール   Lインターネットオプション    Lクッキーの削除    Lファイルの削除(すべてのオフラインコンテンツ含む)    L履歴の削除  とEasyCleaner 2.0 by ToniArtsを使用し   テンポラリディレクトリの項目にチェックを入れ削除しても   以下の4つのファイル・ディレクトリが削除できません  ・c:\Documents and Settings\admin\Local Settings\Temporary Internet Files\Content.IE5\index.dat  ・c:\Documents and Settings\admin\Local Settings\Temporary Internet Files\Content.IE5  ・c:\Documents and Settings\admin\Local Settings\History\History.IE5\index.dat  ・F:\Documents and Settings\admin\Local Settings\History\History.IE5 この4つのファイルとディレクトリはあっても問題ないものなのでしょうか?

  • Windows 7のインストールディレクトリ名変更

    Windows 7をインストールする際、既定のインストールディレクトリ名を変更する方法はないでしょうか? 更に「Program Files」や「Documents and Settings」などの変更もインストール段階でできればいいのですが。 XPではこれらが可能で実際やっているのですが、随分昔のことでハッキリとは方法が思い出せません。

  • ユーザプロファイル(administrator)が壊れた場合の対処方法

    パソコンのローカルのadministratorのユーザプロファイルが壊れてしまったようです。 administratorでログインは出来ますが、スタートメニュ・デスクトップ情報などが消えてしまった状況です。 システムプロパティでプロファイルを確認、またプロファイルのディレクトリは 名前 状態 [ディレクトリ] ------------------------------------------------ コンピュータ名\Administrator バックアップ C:\Documents and Settings\Administrator (1) コンピュータ名\Administrator 一時的 C:\Documents and Settings\TEMP (2) の状態となっております。 現在、ローカルのadministratorでログインすると、(2)でログインされている状況です。 そこで、ユーザプロファイルを修復/作りなおしたいのですが、どのようにすれば、良いでしょうか? とりあえず、データのバックアップはとってあるので、プロファイルを作りなおしでも良いのですが、ローカルのadministratorであるということを心配しています。 よろしくお願いいたします。

  • Window7のセキュリティ設定について

    Windows7のCフォルダのセキュリティの設定がどうもおかしくなったようです。 例えば、管理者権限を持っているはずなのにDocuments and Settingsに アクセスできなかったりプログラムのインストールができなかったりします。 プロパティを見るとSYSTEMやAdministratorsやTrustedInstallerなどが 「特殊なアクセス」になっていて他のチェックが消えてしまっています。 C:\Documents and Settings C:\Program Files C:\Program Files (x86) C:\WINDOWS などの通常のセキュリティの設定がどういうものであるかということと、 セキュリティをその通常の設定へ設定し直す方法とを教えてください。

  • ~user/ をDocumentRootに設定したい。

    次の環境で開発用テストサーバたてて、複数のウェブサイトの動作確認をlocalhost/~foobarで行いたいと思っています。 Windows XP SP2 Apache 1.3.33 ---- D:\Documents and Settings\Administrator\My Documents\Site\users\foobar\public_html の直下にimagesフォルダを置き、 http://localhost/~foobar/images/spacer.gif にアクセスできるようにするためのapacheのhttpd.confの記載方法を教えてください。 現在の症状は次のようになっています。 ---- http://localhost/~foobar/index.html このhtmlの画像/cssディレクトリのリンクは、次のようにルートをみるようになっています。 img src="/images/spacer.gif" 私はここで次のURIにアクセスすることを意図しています。 http://localhost/~foobar/images/spacer.gif そこで、D:\Documents and Settings\Administrator\My Documents\Site\users\foobar\public_html の直下にimagesフォルダを置き、apacheのhttpd.confに次のように記載しましたが、思い通りに画像などが表示されません。 DocumentRoot "D:/Documents and Settings/Administrator/My Documents/Site/users/*/public_html" <Directory "D:/Documents and Settings/Administrator/My Documents/Site/users/*/public_html"> <IfModule mod_userdir.c> UserDir "D:/Documents and Settings/Administrator/My Documents/Site/users/*/public_html" </IfModule> よろしくお願いいたします。

  • この人の名前

    忘れました。教えてください。 C:\Documents and Settings\admin\My Documents\My Pictures\2439280_3087232868.jpg

  • C:\Documents and Settings配下のユーザディレクトリについて

    C:\Documents and Settings配下に『administrator』という ディレクトリがあるかと思いますが、 それ以外に、『administrator.xxxxxx』というフォルダが 何個もできています。 これは、何故できるのでしょうか?

  • 「お気に入り」を設定するレジストリの変更方法

    IEの「お気に入り」が表示されなくなってしまいました。 C:\Documents and Settings\Administrator\Favorites にデータは残っていたので hkey_current_user  Software   Microsoft    Windows     Explorer      Shell Folders のFavoritesを上記の C:\Documents and Settings\Administrator\Favorites に変更しました。 この書き換えが行われたことは、regeditの再起動では確認できます。 しかし、Winを再起動すると、もとに戻ってしまいます。 hkey_current_userは、どこかの単なるコピーなんでしょうか? あるいは、なんかのソフトが動いているのでしょうか。 Win2000です。sp3をダウンロードした次の日あたりにおきました。 sp3のセットアップ中は、ウイルス対策ソフトを落としていました。 油断してたらIEが30個くらい起動していました。その直後からです。 IEは6.0.2600です。

  • Operaスタイル設定とプロファイル

    パソコン用Operaでサイトごとにスタイルを適用する方法の質問です。 C:\Documents and Settings\ユーザ名\Application Data\Opera\Opera\profile\styles\user につくったスタイルシートをOperaが参照してくれません(スタイルが反映されない)。 しかし、 C:\Program Files\Opera\styles\user につくれば、ちゃんと参照してくれます(スタイルが反映される)。 でも、Operaをアップグレードするとき、C:\Program Files\Opera\styles\userの中は初期化されませんか? Opera/9.10 (Windows NT 5.1; U; ja)

専門家に質問してみよう