C - تهيئة حيوي صفائف
-
05-07-2019 - |
سؤال
وأنا أحاول العثور على ما يعادل كثافة العمليات myArray [ن]، إلا أنني لا أعرف ما هو ن دون الإدخال.
هل التعليمة البرمجية التالية يفترض أن تعمل؟ (ولست بحاجة لاستخدام kmalloc بدلا من malloc).
int * pages;
//... later, after we find out n...
pages = (int *)kmalloc(npages * sizeof(int));
والتصحيح باستخدام جدب، والصفحات القيمة [0] لا يبدو أن تكون 0 - وهذا متوقع
المحلول
نعم. لم يتم تهيئة الذاكرة، كنت مجرد الحصول على مؤشر إلى قطعة الخاص بك من الذاكرة.
وستحتاج إلى memset
لتهيئة ما يلي:
memset(pages, 0, npages * sizeof(int));
وأيضا، إلا إذا أنا مخطئ kmalloc
يأخذ <لأ href = "http://people.nl.linux.org/ftp/pub/anoncvs/kernelnewbies/documents/kdoc/kernel-api/r2415.html" يختلط = "noreferrer نوفولو"> المعلمة الثانية أو نوع من الذاكرة لتخصيص.
نصائح أخرى
وmalloc
ترجع مؤشر إلى موقع على كومة التي خصصت لأنها مجموعة الخاصة بك. فإنه لا تهيئة تلك الذاكرة. يمكنك استخدام calloc
بدلا من malloc
أن تتم تهيئة الذاكرة (مجموعة إلى الصفر)، أو يمكنك استخدام memset
بعد تخصيص الذاكرة وتعيين الذاكرة إلى الصفر نفسك.
ومنذ كنت تستخدم kmalloc
، ربما عليك استخدام memset
. لا أعتقد أن هناك cmalloc
لتخصيص الذاكرة تهيئة في النواة.
وبدلا من ذلك يمكنك استخدام نواة وظيفة kzalloc :
int * pages;
pages = (int *)kzalloc(npages * sizeof(int), GFP_KERNEL);