سؤال

وأنا أحاول العثور على ما يعادل كثافة العمليات 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);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top