Scroll to navigation

posix_memalign(3) Library Functions Manual posix_memalign(3)

الاسم

posix_memalign, aligned_alloc, memalign, valloc, pvalloc - تخصيص ذاكرة مصفوفة

المكتبة

مكتبة سي المعيارية (libc، -lc)

موجز

#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
void *aligned_alloc(size_t alignment, size_t size);
[[deprecated]] void *valloc(size_t size);
#include <malloc.h>
[[deprecated]] void *memalign(size_t alignment, size_t size);
[[deprecated]] void *pvalloc(size_t size);

متطلبات ماكروات اختبار الميزات لـ glibc (انظر feature_test_macros(7)):

posix_memalign():


_POSIX_C_SOURCE >= 200112L

aligned_alloc():


_ISOC11_SOURCE

valloc():


منذ glibc 2.12:
(_XOPEN_SOURCE >= 500) && !(_POSIX_C_SOURCE >= 200112L)
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
قبل glibc 2.12:
_BSD_SOURCE || _XOPEN_SOURCE >= 500

الوصف

تخصص الدالة posix_memalign() size بايت وتضع عنوان الذاكرة المخصصة في *memptr. سيكون عنوان الذاكرة المخصصة مضاعفًا لـ alignment، والذي يجب أن يكون قوة للعدد 2 ومضاعفًا لـ sizeof(void *). يمكن تمرير هذا العنوان لاحقًا بنجاح إلى free(3). إذا كان size يساوي 0، فإن القيمة الموضوعة في *memptr هي إما NULL أو قيمة مؤشر فريدة.

تخصص الدالة المُهملة memalign() size بايت وتُعيد مؤشرًا إلى الذاكرة المخصصة. سيكون عنوان الذاكرة مضاعفًا لـ alignment، والذي يجب أن يكون قوة للعدد 2.

aligned_alloc() هي نفس memalign()، باستثناء القيد الإضافي بأن alignment يجب أن يكون قوة للعدد 2.

تخصص الدالة المُهملة valloc() size بايت وتُعيد مؤشرًا إلى الذاكرة المخصصة. سيكون عنوان الذاكرة مضاعفًا لحجم الصفحة. وهي مكافئة لـ memalign(sysconf(_SC_PAGESIZE),size).

الدالة المُتقادمة pvalloc() تشبه valloc()، لكنها تُقرّب حجم التخصيص لأعلى إلى المضاعف التالي لحجم صفحة النظام.

بالنسبة لجميع هذه الدوال، الذاكرة لا تُصفّر.

قيمة الإرجاع

aligned_alloc()، memalign()، valloc()، و pvalloc() تُعيد مؤشرًا إلى الذاكرة المُخصصة عند النجاح. عند الخطأ، تُعاد NULL، ويُضبط errno للإشارة إلى الخطأ.

posix_memalign() تُعيد صفرًا عند النجاح، أو إحدى قيم الخطأ المُدرجة في القسم التالي عند الفشل. قيمة errno لا تُضبط. في لينكس (وأنظمة أخرى)، posix_memalign() لا تُعدّل memptr عند الفشل. مُتطلب لتوحيد هذا السلوك أُضيف في POSIX.1-2008 TC2.

الأخطاء

لم يكن معامل alignment قوة للعدد 2، أو لم يكن مضاعفًا لـ sizeof(void *).
نفدت الذاكرة.

السمات

للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر attributes(7).

الواجهة السمة القيمة
aligned_alloc(), memalign(), posix_memalign() سلامة الخيوط MT-Safe
valloc(), pvalloc() سلامة الخيوط MT-Unsafe init

المعايير

C11.
POSIX.1-2008.
لا شيء.
GNU.

التاريخ

glibc 2.16. C11.
glibc 2.1.91. POSIX.1d, POSIX.1-2001.
glibc 2.0. SunOS 4.1.3.
glibc 2.0. 3.0BSD. وُثق كمهمش في 4.3BSD، وكقديم في SUSv2.
glibc 2.0.

الترويسات

يتفق الجميع على أن posix_memalign() مُصرّح بها في <stdlib.h>.

في بعض الأنظمة، memalign() مُصرّح بها في <stdlib.h> بدلاً من <malloc.h>.

وفقًا لـ SUSv2، يُصرح عن valloc() في <stdlib.h>. تُصرح glibc عنها في <malloc.h>، وأيضًا في <stdlib.h> إذا عُرفت ماكروهات اختبار الميزات المناسبة (انظر أعلاه).

ملاحظات

في العديد من الأنظمة، توجد قيود على المحاذاة، على سبيل المثال، على المخازن المؤقتة المُستخدمة للإدخال/الإخراج المباشر لجهاز الكتلة. يُحدد POSIX استدعاء pathconf(path,_PC_REC_XFER_ALIGN) الذي يُخبر بالمحاذاة المطلوبة. الآن يمكن استخدام posix_memalign() لتلبية هذا المُتطلب.

posix_memalign() تتحقق من أن alignment يُطابق المُتطلبات المُفصّلة أعلاه. memalign() قد لا تتحقق من أن وسيط alignment صحيح.

يُطلب POSIX أن الذاكرة المُحصّلة من posix_memalign() يمكن تحريرها باستخدام free(3). بعض الأنظمة لا تُوفّر طريقة لاستعادة الذاكرة المُخصصة بـ memalign() أو valloc() (لأنه يمكن تمرير إلى free(3) فقط مؤشرًا مُحصّلاً من malloc(3)، بينما، على سبيل المثال، memalign() ستستدعي malloc(3) ثم تُحاذي القيمة المُحصّلة). تطبيق glibc يسمح باستعادة الذاكرة المُحصّلة من أي من هذه الدوال باستخدام free(3).

malloc(3) في glibc تُعيد دائمًا عناوين ذاكرة مُحاذاة لـ 8 بايت، لذا هذه الدوال مطلوبة فقط إذا كنت تحتاج قيم محاذاة أكبر.

انظر أيضًا

brk(2)، getpagesize(2)، free(3)، malloc(3)

ترجمة

تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.

2 مايو 2024 صفحات دليل لينكس 6.9.1