| GPERF(1) | FSF | GPERF(1) |
نام (NAME)
gperf - تولید یک تابع درهمسازی کامل از مجموعهای از کلیدها
خلاصه دستور (SYNOPSIS)
gperf [OPTION]... [INPUT-FILE]
توضیحات (DESCRIPTION)
ابزار GNU 'gperf' توابع درهمسازی کامل (perfect hash functions) تولید میکند.
اگر یک گزینهٔ طولانی دارای آرگومان اجباری باشد، برای گزینهٔ کوتاه معادل آن نیز اجباری است.
محل فایل خروجی:
--output-file=FILE نوشتن خروجی در فایل مشخصشده.
اگر هیچ فایل خروجی مشخص نشود یا اگر - باشد، نتایج در خروجی استاندارد نوشته میشوند.
تفسیر فایل ورودی:
- -e, --delimiters=DELIMITER-LIST
- به کاربر امکان میدهد رشتهای حاوی جداکنندههای مورد استفاده برای تفکیک کلیدواژهها از صفتهایشان را ارائه دهد. پیشفرض "," است.
- -t, --struct-type
- به کاربر امکان میدهد اعلان نوع ساختاریافته را برای کد تولیدشده اضافه کند. هر متنی پیش از %% بخشی از اعلان نوع در نظر گرفته میشود. کلیدواژهها و فیلدهای اضافی میتوانند پس از آن بیایند، هر گروه از فیلدها در یک خط.
- --ignore-case
- حروف بزرگ و کوچک ASCII را یکسان در نظر میگیرد. توجه داشته باشید که نگاشتهای حروف وابسته به محلی (locale) نادیده گرفته میشوند.
زبان برای کد خروجی:
- -L, --language=LANGUAGE-NAME
- کد را به زبان مشخصشده تولید میکند. زبانهای پشتیبانیشده در حال حاضر عبارتند از C++، ANSI-C، C و KR-C. پیشفرض ANSI-C است.
جزئیات در کد خروجی:
- -K, --slot-name=NAME
- نام مؤلفهٔ کلیدواژه را در ساختار کلیدواژه انتخاب میکند.
- -F, --initializer-suffix=INITIALIZERS
- مقداردهندههای اولیه برای مؤلفههای اضافی در ساختار کلیدواژه.
- -H, --hash-function-name=NAME
- نام تابع درهمسازی تولیدشده را مشخص میکند. پیشفرض 'hash' است.
- -N, --lookup-function-name=NAME
- نام تابع جستجوی تولیدشده را مشخص میکند. نام پیشفرض 'in_word_set' است.
- -Z, --class-name=NAME
- نام کلاس C++ تولیدشده را مشخص میکند. نام پیشفرض 'Perfect_Hash' است.
- -7, --seven-bit
- نویسههای ۷ بیتی را فرض میکند.
- -l, --compare-lengths
- طول کلیدها را پیش از اقدام به مقایسه رشتهای بررسی میکند. اگر کلیدواژهها حاوی بایتهای NUL باشند این کار ضروری است. همچنین به کاهش تعداد مقایسههای رشتهای انجامشده در طول جستجو کمک میکند.
- -c, --compare-strncmp
- کد مقایسه را به جای strcmp با استفاده از strncmp تولید میکند.
- -C, --readonly-tables
- محتویات جدولهای جستجوی تولیدشده را ثابت، یعنی فقطخواندنی (readonly) میکند.
- -E, --enum
- مقادیر ثابت را به جای دستورهای define، با استفاده از یک enum محلی درون تابع جستجو تعریف میکند.
- -I, --includes
- فایل سرایند سیستمی مورد نیاز <string.h> را در ابتدای کد میگنجاند.
- -G, --global-table
- جدول ایستای کلیدواژهها را به صورت یک متغیر عمومی ایستا (static global) تولید میکند، به جای آنکه آن را درون تابع جستجو پنهان سازد (که رفتار پیشفرض است).
- -P, --pic
- جدول تولیدشده را برای گنجانده شدن در کتابخانههای اشتراکی بهینهسازی میکند. این کار زمان راهاندازی برنامههایی را که از کتابخانه اشتراکی حاوی کد تولیدشده استفاده میکنند، کاهش میدهد.
- -Q, --string-pool-name=NAME
- نام مخزن رشته (string pool) تولیدشده توسط گزینهٔ --pic را مشخص میکند. نام پیشفرض 'stringpool' است.
- --null-strings
- برای مدخلهای خالی جدول کلیدواژهها به جای رشتههای خالی از رشتههای NULL استفاده میکند.
- --constants-prefix=PREFIX
- پیشوند ثابتهایی نظیر TOTAL_KEYWORDS را مشخص میکند.
- -W, --word-array-name=NAME
- نام آرایه فهرست کلمات را مشخص میکند. نام پیشفرض 'wordlist' است.
- --length-table-name=NAME
- نام آرایه جدول طول را مشخص میکند. نام پیشفرض 'lengthtable' است.
- -S, --switch=COUNT
- باعث میشود کد C تولیدشده به جای جدول جستجوی آرایهای، از ساختار عبارت switch استفاده کند. این امر میتواند منجر به کاهش نیاز به زمان و حافظه برای برخی از فایلهای کلید شود. آرگومان COUNT تعیین میکند چه تعداد عبارت switch تولید شود. مقدار ۱ یک switch حاوی تمامی عناصر ایجاد میکند، مقدار ۲ دو جدول با ۱/۲ از عناصر در هر جدول ایجاد میکند، و به همین ترتیب. اگر مقدار COUNT بسیار بزرگ باشد، مثلاً ۱۰۰۰۰۰۰، کد C تولیدشده یک جستجوی دودویی انجام میدهد.
- -T, --omit-struct-type
- از انتقال اعلان نوع به فایل خروجی جلوگیری میکند. اگر نوع مورد نظر قبلاً در جای دیگری تعریف شده است از این گزینه استفاده کنید.
الگوریتم بهکاررفته توسط gperf:
- -k, --key-positions=KEYS
- موقعیتهای کلید مورد استفاده در تابع درهمسازی را انتخاب میکند. انتخابهای مجاز شامل مقادیر بین ۱ تا ۲۵۵ هستند. موقعیتها با کاما از یکدیگر جدا میشوند، بازهها نیز قابل استفادهاند و موقعیتهای کلید میتوانند به هر ترتیبی بیایند. همچنین، نویسه عام '*' باعث میشود تابع درهمسازی تولیدشده همهٔ موقعیتهای کلید را لحاظ کند، و $ نشاندهنده «نویسه پایانی» یک کلید است، مانند $,1,2,4,6-10.
- -D, --duplicates
- کلیدواژههایی را که به مقادیر تکراری درهمسازی میشوند مدیریت میکند. این گزینه برای برخی مجموعههای کلیدواژه با افزونگی بالا مفید است.
- -m, --multiple-iterations=ITERATIONS
- انتخابهای متعددی از مقادیر -i و -j را اجرا کرده و بهترین نتیجه را برمیگزیند. این کار زمان اجرا را به ضریب ITERATIONS افزایش میدهد اما اندازه جدول تولیدشده را به خوبی کمینه میکند.
- -i, --initial-asso=N
- یک مقدار اولیه برای آرایه مقادیر متناظر مشخص میکند. پیشفرض 0 است. تنظیم این مقدار به عددی بزرگتر به افزایش اندازه جدول نهایی کمک میکند.
- -j, --jump=JUMP-VALUE
- بر «مقدار پرش»، یعنی میزان افزایش مقدار نویسه متناظر در هنگام برخورد تأثیر میگذارد. باید یک عدد فرد باشد؛ پیشفرض 5 است.
- -n, --no-strlen
- هنگام محاسبه تابع درهمسازی، طول کلیدواژه را لحاظ نمیکند.
- -r, --random
- از تصادفیسازی برای مقداردهی اولیه جدول مقادیر متناظر استفاده میکند.
- -s, --size-multiple=N
- بر اندازه جدول درهمسازی تولیدشده تأثیر میگذارد. آرگومان عددی N نشان میدهد که محدوده مقادیر متناظر در نسبت با تعداد کلیدها، «چند برابر بزرگتر یا کوچکتر» باشد؛ برای مثال مقدار 3 به این معنی است که «حداکثر مقدار متناظر میتواند حدود ۳ برابر بزرگتر از تعداد کلیدهای ورودی باشد». در مقابل، مقدار 1/3 به این معنی است که «حداکثر مقدار متناظر حدود ۳ برابر کوچکتر از تعداد کلیدهای ورودی باشد». یک جدول بزرگتر باید زمان لازم برای جستجوی ناموفق را کاهش دهد، به قیمت اشغال فضای بیشتر برای جدول. مقدار پیشفرض 1 است.
خروجیهای اطلاعاتی:
- -h, --help
- این پیام را چاپ میکند.
- -v, --version
- شماره نسخهٔ gperf را چاپ میکند.
- -d, --debug
- گزینهٔ اشکالزدایی را فعال میکند (خروجی پرگو در خطای استاندارد تولید میکند).
نویسندگان (AUTHORS)
نوشتهشده توسط Douglas C. Schmidt و Bruno Haible.
گزارش باگها (BUGS)
گزارش باگها به <bug-gperf@gnu.org>.
کپیرایت و تکثیر (COPYRIGHT)
Copyright © 2025 Free Software Foundation, Inc.
مجوز GPLv3+: گنو GPL
نسخه ۳ یا
بالاتر
https://gnu.org/licenses/gpl.html
این یک
نرمافزار
آزاد است:
شما در
تغییر و
بازتوزیع
آن آزاد
هستید. هیچ
ضمانتی
وجود
ندارد، تا
حدی که
قانون
اجازه
میدهد.
همچنین ببینید (SEE ALSO)
مستندات کامل برای gperf به صورت یک راهنمای Texinfo نگهداری میشود. اگر برنامههای info و gperf بهدرستی روی سیستم شما نصب شده باشند، دستور
- info gperf
باید دسترسی شما به راهنمای کامل را فراهم کند.
| آوریل ۲۰۲۵ | GNU gperf 3.3 |