>> [عزف الموسيقى]
>> [تشغيل الفيديو]
>> -انه يكذب.
>> -عن ما؟
>> -لا اعرف.
>> -حتى ماذا نعرف؟
>> -من الساعة 9:15، راي كان Santoya في أجهزة الصراف الآلي.
-Yeah.
لذا فإن السؤال هو، ما كان يفعل في 9:16؟
>> -Shooting ملليمترات 9 في شيء.
ربما رأى قناصة.
>> -or كان يعمل معه.
>> -Wait.
نعود واحد.
>> -ماذا ترى؟
>> -Bring وجهه حتى ملء الشاشة.
>> نظارات العاهل.
>> -هناك من انعكاس.
>> -من هو فريق البيسبول نوفيتاس.
هذا الشعار.
>> -and يتحدث ل أيا كان يرتدي سترة أن.
>> [END قراءة]
>> DAVID مالان: حسنا.
هذا هو CS50 وهذا هو أكثر قليلا من [غير مسموع] التي كنت
تجريب مع مشكلة تعيين أربعة.
اليوم نبدأ ننظر قليلا أكثر بالغ إزاء دعا مؤشرات هذه الأشياء،
وعلى الرغم من انها موضوع غامضة جدا،
اتضح أنه يجري أن تكون الوسائل التي تمكننا
يمكن البدء في بناء وتجميع برامج أكثر تطورا بكثير.
ولكن فعلنا ذلك يوم الأربعاء الماضي عن طريق بعض claymation أولا.
لذلك هذا، أذكر، هو بينكي وكنا له
لنلقي نظرة على البرنامج الذي لم يفعل شيئا للاهتمام،
لكنها لم تكشف عن وجود بعض المشاكل.
حتى أن تبدأ اليوم، لماذا لا نسير بسرعة من خلال عدد قليل من هذه الخطوات،
محاولة لاستخلاص إلى حيث البشري بالضبط ما الذي يحدث هنا
والسبب في هذا هو سيء، وبعد ذلك الانتقال وفعلا بدء بناء شيء
مع هذا الأسلوب؟
لذلك كانت هذه أول سطرين في هذا البرنامج
وشروط للشخص العادي، ما وهذين الخطين تفعل؟
شخص لراحة معقولة مع ما أعلن على الشاشة؟
ما هي هذين الخطين تفعل؟
انها ليست كل ما تختلف عن أسبوع واحد،
ولكن هناك بعض رمزا خاصا جديدا.
نعم؟
العودة الى هناك.
>> الحضور: إعلان المؤشرات؟
DAVID مالان: قل مرة أخرى؟
الحضور: إعلان المؤشرات؟
DAVID مالان: مؤشرات إعلان و دعونا تحسينه أكثر قليلا.
الحضور: (غير مسموع) عنوان x و ثم ذ.
DAVID مالان: وتعالج ذلك الحين.
لذلك على وجه التحديد ما نقوم به ونحن نعلن متغيرين.
هذه المتغيرات، على الرغم من الذهاب أن تكون من نوع نجم كثافة العمليات، التي
يعني على وجه التحديد وهم في طريقهم لتخزين
عنوان عدد صحيح، على التوالي، x و y.
الآن هناك أية قيم؟
هل هناك أي عناوين الفعلية في هذه متغيرين في هذه المرحلة في الوقت المناسب؟
لا.
مجرد يسمى ب القيم القمامة.
إذا كنت لا تعيين في الواقع متغير، كل ما كان في ذاكرة الوصول العشوائي
سابقا هو الذهاب الى ملء مع الأصفار ومنها كل من هذه المتغيرات.
ولكننا لا نعرف حتى الآن ما هي عليه، وهذا هو
سيكون المفتاح لماذا بينكي خسر رأسه الأسبوع الماضي.
>> لذلك كان هذا claymation تجسد هذه
حيث لديك المتغيرين فقط، قطعة دائرية صغيرة من الطين،
التي يمكن تخزين المتغيرات، ولكن كما وتشير الأسهم طويت،
انهم لا افتا الواقع أن تعرف في أي مكان في حد ذاته.
حتى ذلك الحين كان لدينا هذا الخط، وهذا كان جديدا الأسبوع الماضي، malloc للذاكرة
تخصيص، الذي هو مجرد وسيلة الهوى من قول نظام التشغيل لينكس
أو نظام التشغيل ماك أو ويندوز، مهلا، أعطني بعض الذاكرة،
وكل ما عليك أن أقول نظام التشغيل
ما عندما يسأل هو عن الذاكرة.
انها لن يهمني ما كنت تنوي القيام به مع ذلك،
ولكنك تحتاج لقول التشغيل نظام ما عن طريق malloc.
نعم؟
>> الحضور: كم؟
DAVID مالان: كم؟
كم في بايت، وهكذا، وهذا، مرة أخرى، على سبيل المثال مفتعلة، هو مجرد قائلا:
أعطني حجم وكثافة العمليات.
الآن، وحجم وكثافة العمليات أربعة بايت أو 32 بت.
لذلك هذا هو مجرد وسيلة ل قائلا: مهلا، نظام التشغيل،
تعطيني أربعة بايت من الذاكرة التي يمكن استخدامها في تصرفي،
وعلى وجه التحديد، ما يفعل عودة malloc مع الاحترام
إلى أن قسما من أربعة بايت؟
الحضور: عنوان؟
DAVID مالان: عنوان.
عنوان أن قسما من أربعة بايت.
بالضبط.
وهذا ما يتم تخزينها في نهاية المطاف في العاشر وهذا هو السبب في أننا لا حقا
يهمني ما رقم هذا العنوان هو، سواء كان ذلك OX1 أو OX2
أو بعض عنوان الست عشري خفي.
نحن فقط يهتمون بالصور أن هذا المتغير x هو الآن
مشيرا إلى أن جزءا من الذاكرة.
لذلك السهم يمثل المؤشر، أو وبشكل أكثر تحديدا، عنوان الذاكرة.
ولكن مرة أخرى، نحن لا نهتم عادة ما هي هذه العناوين الفعلية.
الآن، ويقول هذا الخط ما في شروط للشخص العادي؟
نجم س يحصل 42 منقوطة.
ماذا يعني هذا؟
اتريد الذهاب؟
لا تخدش عنقك.
>> الحضور: عنوان x هو في ال 42.
>> DAVID مالان: عنوان x هو في 42.
ليس تماما.
قريبة جدا، ولكن ليس تماما، لأنه لا يوجد النجم الذي هو التقديم هذا السينية.
لذلك نحن بحاجة إلى قرص قليلا.
نعم؟
>> الحضور: القيمة التي مؤشر العاشر يشير إلى غير 42.
DAVID مالان: OK.
قيمة أن المؤشر x هو مشيرا إلى، دعنا نقول، يجب أن يكون 42،
أو بعبارة أخرى، نجم س يقول، انتقل إلى أي عنوان
هو في العاشر، سواء كان ذلك في 1 أكسفورد الشارع أو 33 شارع أكسفورد
أو OX1 أو ox33، أيا كان هذا العنوان هو رقمي،
نجمة x هو dereferencing من س.
لذلك يذهب إلى هذا العنوان و ثم وضع رقم 42 هناك.
بحيث يكون طريقة معادلة للقول ذلك.
ذلك أن كل شيء بخير وثم نحن سيمثل الصورة
على النحو التالي حيث أضفنا 42 لأنه قطعة من أربعة
بايت على الجانب الأيمن، ولكن وكان هذا الخط حيث انحرف المسار
ورئيس بينكي وبرزت من عند هذه النقطة،
لأن الأمور السيئة تحدث عندما كنت dereference القيم القمامة
أو كنت dereference غير صالحة مؤشرات، وأنا أقول غير صالحة
لأنه في هذه المرحلة من القصة، ما هو داخل ذ؟
ما هي قيمة y مقرها على بعد خطوات قليلة الماضية؟
نعم؟
ما هذا؟
>> الحضور: عنوان.
DAVID مالان: عنوان.
يجب أن يكون عنوان لكني تهيئة ذلك؟
لذلك ليس لدي حتى الآن.
فما هو معروف أن تكون هناك؟
انها مجرد بعض القيمة القمامة.
يمكن أن يكون أي عنوان من صفر إلى 2000000000 إذا كان لديك اثنين من العربات من ذاكرة الوصول العشوائي،
أو صفر إلى 4 مليارات إذا كنت قد حصلت أربعة غيغابايت من ذاكرة الوصول العشوائي.
انها بعض القيمة القمامة، ولكن المشكلة هي
أن نظام التشغيل، إذا لم يعطكم
أن جزءا من الذاكرة على وجه التحديد أن كنت في محاولة للذهاب ل،
انها تسير عموما أن يسبب ما رأيناه باعتباره خطأ تجزئة.
وذلك في الواقع، أي واحد منكم الذين لديهم كافح في مشاكل في ساعات العمل
أو في مشاكل هذا أكثر عموما مع محاولة معرفة
خطأ تجزئة، وهذا يعني بشكل عام
كنت لمس جزء من الذاكرة التي يجب أن لا يكون.
كنت لمس الذاكرة التي نظام التشغيل لديها لا
يسمح لك لمسة، سواء كان ذلك بالافراط في مجموعة الخاصة بك
أو بدءا من الآن، سواء انها لأنك لمس
الذاكرة التي هي فقط بعض القيمة القمامة.
>> القيام بذلك نجم س هنا النوع من السلوك غير معرف.
يجب أن لا تفعل ذلك بسبب خلاف و، البرنامج مجرد الذهاب الى تحطم الطائرة،
لتقوله، انتقل إلى هذا العنوان
وليس لديك فكرة عن مكان هذا العنوان هو في الواقع.
لذلك من المرجح نظام التشغيل الذهاب إلى تعطل البرنامج
ونتيجة لذلك، بل، وهذا هو ما حدث هناك لبينكي.
حتى في نهاية المطاف، بينكي الثابتة هذه المشكلة مع هذا.
لذلك هذا البرنامج كانت معيبة نفسها.
ولكن إذا كنت نوع من المضي قدما وتنفيذ هذا الخط بدلا من ذلك،
ذ س يساوي فقط يعني أيا كان عنوان هو العاشر، وضعت أيضا في ص.
>> وذلك بالصور، لدينا يمثل هذا مع اثنين من السهام
من x و من التأشير ص إلى نفس المكان.
حتى لغويا، س يساوي إلى y لأن كلا من هؤلاء
يتم تخزين نفسه عنوان، إرجو مشيرا في الوقت ذاته 42،
والآن، عندما تقول نجمة ذ، انتقل إلى عنوان في ذ،
هذا له تأثير الجانب مثيرة للاهتمام.
حتى العنوان في ص هو الشيء نفسه كعنوان في العاشر.
حتى إذا كنت أقول الانتقال إلى العنوان في ص وتغيير القيمة إلى 13،
من آخر يتأثر؟
X هو، نقطة D، إذا جاز التعبير، يجب أن تتأثر أيضا.
>> وبالفعل، كيف لفت نيك هذه الصورة في claymation كان ذلك بالضبط.
على الرغم من أننا اتباع المؤشر ذ، لقد انتهى الأمر في نفس المكان،
وحتى إذا كان لنا أن طباعة من س أو ص pointee، و
ثم كنا نرى قيمة 13.
الآن، وأنا أقول pointee أن يكون بما يتفق مع الفيديو.
المبرمجين، إلى بلدي المعرفة، في الواقع أبدا
يقول pointee كلمة، ما هو مدببة
في، ولكن من أجل التناسق مع الفيديو، وتحقيق
هذا كل ما كان يعني في هذه الحالة.
لذلك أي أسئلة على claymation أو مؤشرات أو malloc فقط حتى الآن؟
لا؟
حسنا.
>> ذلك دون مزيد من من اللغط، دعونا نلقي نظرة
في حيث لديه هذا الواقع استخدمت لبعض الوقت.
حتى لقد كان لدينا هذه المكتبة CS50 وهذا ما حصل كل من هذه الوظائف.
لقد استخدمنا GetInt الكثير، GetString، ربما GetLongLong في وقت سابق
في بلدي PSET واحد أو نحو ذلك، ولكن ما تم بالفعل يحدث؟
حسنا، دعونا نلقي نظرة سريعة تحت غطاء محرك السيارة في برنامج
لماذا يلهم نقدم لكم CS50 مكتبة، وبالفعل اعتبارا من الأسبوع الماضي،
بدأنا اتخاذ تلك عجلات التدريب خارج.
لذلك يتم فرز هذه الآن لتشريح الجثة ما
وقد استمر الحال على داخل المكتبة CS50،
على الرغم من أننا الآن سوف نبدأ التحرك بعيدا عن ذلك بالنسبة لمعظم البرامج.
>> لذلك هذا هو برنامج يسمى scanf 0.
انها فائقة قصيرة.
انها مجرد هذه الأسطر، لكنه يقدم وظيفة تسمى scanf
أننا ذاهبون فعلا أن نرى في لحظة داخل المكتبة CS50،
وإن كان ذلك في شكل مختلف قليلا.
لذلك هذا البرنامج على خط 16 تم إعلان متغير x.
حتى تعطيني أربعة بايت عدد صحيح.
انه تم إخبار المستخدم، عدد من فضلك، وبعد ذلك
هذا هو خط المثير للاهتمام أن يربط معا بالفعل الأسبوع الماضي
و هذا.
Scanf، ومن ثم لاحظ أنه يأخذ سلسلة الشكل، تماما مثل printf،
٪ ط يعني كثافة العمليات، وبعد ذلك يأخذ الحجة الثانية التي تبدو قليلا
جبان.
انها العطف السينية، وأذكر، رأينا هذا الأسبوع فقط مرة واحدة الماضي.
ماذا العطف س تمثل؟
ماذا تفعل العطف في C؟
نعم؟
>> الحضور: عنوان.
DAVID مالان: عنوان.
حتى انها على العكس المشغل نجمة،
في حين أن المشغل نجمة يقول، انتقل إلى هذا العنوان، المشغل العطف
يقول: معرفة عنوان هذا المتغير،
وهكذا هذا هو المفتاح، ل الغرض scanf في الحياة
هو لمسح المستخدم المدخلات من لوحة المفاتيح،
اعتمادا على كل ما هو أو هي أنواع، ومن ثم قراءة المدخلات هذا المستخدم
إلى متغير، ولكننا رأيت في الأسبوعين الماضيين
أن هذه الوظيفة مبادلة نحن حاولت جهد لتنفيذ
كانت مكسورة فقط.
أذكر أنه مع وظيفة المبادلة إذا أعلنا فقط A و B كما [إينتس]،
نحن لم بنجاح مبادلة اثنين من المتغيرات داخل مبادلة
تماما مثل مع الحليب وOJ، ولكن بمجرد عاد المبادلة
ماذا كانت النتيجة فيما يتعلق لx و y، القيم الأصلية؟
لا شى.
نعم.
لم يحدث شيء ذلك الوقت، ل مقايضة تتغير فقط نسخ محلية لها،
وهو ما يعني، كل هذه المرة، كلما قمنا
تم تمرير في الحجج إلى وظائف، ونحن
مجرد مرور نسخ من تلك الحجج.
يمكنك أن تفعل مع أن كل ما تريد معهم،
ولكن انهم ذاهبون لديها أي تأثير على القيم الأصلية.
لذلك هذا هو مشكوك إذا كنت تريد أن يكون لها وظيفة مثل scanf
في الحياة، والذي يهدف إلى مسح إدخال المستخدم من لوحة المفاتيح
ثم ملء الفراغات، وذلك ل الكلام، وهذا هو، وإعطاء متغير مثل X
قيمة، لأنه إذا كان لي لمجرد تمرير العاشر لscanf،
إذا كنت تنظر في منطق آخر الأسبوع scanf يمكن أن تفعل ما تشاء
مع نسخة من العاشر، لكنه لم يستطع تغيير دائم س ما لم نعطي
scanf خريطة الكنز، إذا جاز التعبير، حيث x يمثل نقطة، حيث
نحن نمر في عنوان س بحيث scanf يمكن أن نذهب الى هناك وتغيير الواقع
قيمة x.
وهكذا في الواقع، كل أن هذا البرنامج لا
إذا قمت بعمل scanf 0، في محدثي 5M الدليل، وجعل scanf 0،
نقطة خفض scanf، عدد يرجى 50، وذلك بفضل ل50.
>> لذلك ليس كل ما مثيرة للاهتمام، ولكن ما يحدث في الواقع هو
غير أنه بمجرد أن أسميه scanf هنا، قيمة x
ويتم تغييرها بشكل دائم.
الآن، وهذا يبدو لطيفا و جيد، وفي الواقع،
يبدو أننا لا نحتاج حقا مكتبة CS50 في كل بعد الآن.
على سبيل المثال، دعونا تشغيل هذا مرة أخرى هنا.
اسمحوا لي أن فتحه لفترة ثانية.
دعونا نحاول عددا من فضلك و بدلا من أن تقول 50 مثل قبل،
دعنا نقول فقط لا.
حسنا، هذا غريب بعض الشيء.
حسنا.
ومجرد بعض الهراء هنا.
لذلك لا يبدو أن التعامل مع المواقف الخاطئة.
لذلك نحن بحاجة إلى الحد الأدنى من البداية إضافة بعض تدقيق الأخطاء
للتأكد من أن المستخدم لديه كتبته في العدد الفعلي مثل 50،
لأن الكلمات بكتابة ما يبدو لم يتم الكشف عن إشكالية،
ولكن ربما ينبغي أن يكون.
>> دعونا ننظر في هذا الإصدار الآن هذا محاولة مني لreimplement GetString.
إذا scanf لديه كل هذه وظائف في بنائها،
لماذا وصلنا تم تجريب مع هذه عجلات التدريب مثل GetString؟
حسنا، هنا ربما بلدي نسخة بسيطة من GetString
، وأنا قد قلت بموجبها قبل أسبوع، تعطيني سلسلة والذي يطلق عليه العازلة.
اليوم، انا ذاهب الى مجرد بداية قائلا نجمة شار، التي، أذكر،
انها مجرد مرادف.
يبدو ترويعا لكنه نفس الشيء بالضبط.
حتى تعطيني متغير يسمى عازلة ما يجري لتخزين سلسلة،
نقول للسلسلة المستعمل من فضلك، وبعد ذلك، تماما مثل من قبل،
دعونا نحاول أن تقترض هذا الدرس scanf ٪ الصورة هذه المرة ومن ثم تمرير في المخزن.
الآن، شيك التعقل سريع.
لماذا أنا لا أقول العطف عازلة هذه المرة؟
نستنتج من المثال السابق.
الحضور: شار نجوم على المؤشر.
DAVID مالان: بالضبط، لأن هذا الوقت، شار
النجم هو بالفعل مؤشر، عنوان، بحكم التعريف هذا النجم يجري هناك.
وإذا scanf تتوقع عنوان، يكفي فقط لتمرير في المخزن.
ولست بحاجة إلى القول عازلة العطف.
لالغريب، هل يمكن تفعل شيئا مثل هذا.
فإنه يكون لها معنى مختلف.
هذا من شأنه أن تعطيك مؤشر إلى المؤشر، الذي هو في الواقع
شيء صالح في C، ولكن ل الآن، دعونا يبقيه بسيط
والحفاظ على قصة متسقة.
أنا ذاهب لمجرد تمرير في العازلة، وهذا هو الصحيح.
المشكلة هي هذه على الرغم من.
اسمحوا لي أن المضي قدما في تشغيل هذا البرنامج بعد تجميع ذلك.
جعل scanf 1.
اللعنة، مترجم بلدي اصطياد خطأ بلدي.
أعطني ثانية واحدة.
رنة.
دعنا نقول scanf-1.C.
حسنا.
هناك نذهب.
أنا في حاجة إليه.
ID CS50 ديه مختلف إعدادات التكوين
التي تحميك ضد نفسك.
كنت بحاجة لتعطيل تلك التي تشغيل رنة يدويا هذه المرة.
لذلك سلسلة من فضلك.
انا ذاهب الى المضي قدما واكتب في المفضلة العالم مرحبا.
OK، لاغية.
هذا ليس ما كتبته.
لذلك فمن يدل على كون شيء خاطئ.
اسمحوا لي أن المضي قدما واكتب في سلسلة طويلة حقا.
شكرا لاغية وأنا لا أعرف إذا أنا ذاهب لتكون قادرة على تحطم عليه.
دعونا نحاول نسخة صغيرة لصق ومعرفة ما إذا كان هذا يساعد.
فقط لصق الكثير من هذا.
انها بالتأكيد أكبر سلسلة من المعتاد.
دعونا فقط الكتابة عليه حقا.
لا.
عليك اللعنة.
القيادة لم يتم العثور.
حتى أن غير ذات صلة.
هذا لأنني لصق بعض الشخصيات سيئة،
ولكن هذا تبين عدم الذهاب إلى العمل.
>> دعونا نحاول هذا مرة أخرى، ل انها أكثر متعة إذا كنا فعلا تحطم ذلك.
دعونا اكتب هذا والآن، وأنا الذهاب لنسخ سلسلة طويلة حقا
والآن دعونا نرى ما اذا كنا يمكن أن تحطم هذا الشيء.
لاحظ أنني حذفت المساحات و خطوط جديدة والفاصلة المنقوطة
وجميع الشخصيات غير تقليدي.
أدخل.
والآن شبكة مجرد كونها بطيئة.
أنا أحتفظ القيادة-V فترة طويلة جدا، بشكل واضح.
عليك اللعنة!
القيادة لم يتم العثور.
>> حسنا.
حسنا، هذه النقطة هي على الرغم من ذلك ما يلي.
ذلك ما يجري في الواقع على هذا الإعلان
من شار عازلة نجوم على خط 16؟
فما أنا الحصول على عندما أعلن مؤشر؟
جميع انني اتلقى هو قيمة أربعة بايت دعا عازلة، ولكن ما هو داخل منه
في اللحظة؟
انها مجرد بعض القيمة القمامة.
لأن أي وقت قمت بتعريف متغير في C، انها مجرد بعض القيمة القمامة،
وبدأنا رحلة على هذا الواقع.
الآن، عندما أقول scanf، انتقل إلى هذا العنوان
ووضع كل ما يكتب المستخدم في.
إذا قام المستخدم بكتابة في مرحبا العالم، حسنا، أين وضعه؟
العازلة هي قيمة القمامة.
>> ولهذا النوع من مثل السهم وهذا ما لافتا يدري أين.
ربما انها لافتا هنا في ذاكرتي.
وذلك عندما يقوم المستخدم الأنواع في العالم مرحبا،
البرنامج يحاول وضع سلسلة مرحبا العالم مائل 0
في ذلك قطعة من الذاكرة.
ولكن مع احتمال كبير، ولكن واضح ليس احتمال بنسبة 100٪،
الكمبيوتر هو الذهاب الى تحطم ثم البرنامج لأن هذا ليس
ذاكرة ينبغي أن يسمح لي أن أتطرق.
هكذا وباختصار، هذا البرنامج هو معيبة لهذا السبب بالضبط.
أنا في الأساس لا يفعل ماذا؟
ما هي الخطوات التي أنا حذفت، تماما مثل نحن حذفت مع المثال بينكي الأول؟
نعم؟
>> الحضور: تخصيص الذاكرة؟
>> DAVID مالان: تخصيص الذاكرة.
أنا لم تخصص في الواقع أي ذاكرة لهذه السلسلة.
حتى نتمكن من إصلاح هذا في عدة طرق.
واحد، ونحن يمكن أن يبقيه بسيط في واقع الأمر، الآن أنت
سنبدأ في رؤية طمس من الخطوط الفاصلة بين ما
مجموعة هو، ما هي سلسلة، ما نجمة شار هو، ما هي مجموعة من حرف
هو.
وهنا مثال ثان تشمل سلاسل وإشعار
كل ما قمت به على شبكة الإنترنت 16 هو، بدلا من أن تقول
هذا المخزن سيكون شار نجوم، مؤشر إلى قطعة من الذاكرة،
انا ذاهب لإعطاء استباقي جدا نفسي عازلة لل16 حرفا،
وفي الواقع، إذا كنت على دراية مع التخزين المؤقت المدى،
ربما من عالم الفيديو، حيث الفيديو هو التخزين المؤقت، التخزين المؤقت،
التخزين المؤقت.
حسنا، ما هي العلاقة هنا؟
حسنا، في الداخل من يوتيوب وداخل مشغلات الفيديو
عموما مجموعة وهذا أكبر من 16.
قد يكون مجموعة من حجم واحد ميغا بايت، ربما 10 ميغا بايت،
وإلى أن مجموعة لا متصفحك تحميل مجموعة كاملة من وحدات البايت،
مجموعة كاملة من ميغابايت من الفيديو، ومشغل فيديو،
يوتيوب أو أيا كان، ويبدأ قراءة بايت من أن مجموعة،
وأي وقت ترى كلمة التخزين المؤقت، التخزين المؤقت،
وهذا يعني أن اللاعب لديه نصل الى نهاية هذا الصفيف.
الشبكة بطيئة بحيث لم ملء المصفوفة مع المزيد بايت
وهكذا كنت خارجا من البتات لعرضه للمستخدم.
>> لذلك عازلة هو مصطلح مناسب هنا في هذا انها مجرد مجموعة، جزءا من الذاكرة.
وهذا سوف إصلاحه لأنه اتضح
التي يمكنك علاج صفائف كما لو هم عناوين، على الرغم عازلة
هو مجرد رمز، انها تسلسل الأحرف، العازلة،
هذا مفيد بالنسبة لي، مبرمج، يمكنك تمرير اسمها حول
كما لو كانت المؤشر، كما لو أنه
كان عنوان قطعة من الذاكرة لمدة 16 حرف.
لذلك وهذا القول، وأنا يمكن أن تمر وscanf بالضبط تلك الكلمة
وحتى الآن، إذا قمت بعمل هذا البرنامج، جعل scanf 2، نقطة مائل scanf 2،
واكتب في مرحبا العالم، أدخل، أن time--
>> هم، ماذا حدث؟
سلسلة من فضلك.
أي خطأ ارتكبت؟
مرحبا العالم، العازلة.
مرحبا بالعالم.
آه، أنا أعرف ما تقوم به.
حسنا.
لذلك هو القراءة حتى الفضاء الأول.
لذلك دعونا خداع لمجرد لحظة و أقول إنني فقط أريد أن اكتب شيئا
منذ فترة طويلة حقا مثل هذا هو جملة طويلة هذا هو واحد، اثنان، ثلاثة، أربعة، خمسة،
ستة، سبعة، ثمانية، تسعة، 10، 11، 12، 13، 14، 15، 16.
حسنا.
إنه حقا لجملة طويلة.
لذلك هذا الحكم هو أطول من 16 حرفا
وحتى عندما كنت هاهنا، ماذا سيحدث؟
حسنا، في هذه الحالة ل عازلة قصة، كنت قد أعلنت
لكونها في الواقع مجموعة مع 16 حرف على استعداد للذهاب.
حتى واحد، اثنان، ثلاثة، أربعة، خمسة، ستة، سبعة، ثمانية، تسعة، 10، 11، 12، 13، 14،
15، 16.
حتى 16 حرفا، والآن، عندما كنت قراءة في شيء من هذا القبيل هو عملية طويلة
الجملة، ما الذي سيحدث هو أنني ذاهب لقراءة في هذا هو عملية طويلة
S-E-N-T-E-N-C-E، الجملة.
>> لذلك هذا هو عمدا شيئا سيئا بأنني
الاستمرار في الكتابة خارج حدود مجموعة بلدي،
ما وراء حدود عازلة بلدي.
ويمكنني أن تحصل على الحظ والبرنامج سوف تبقى على التوالي ولا يهمني،
ولكن بصفة عامة، وهذا سوف تعطل بالفعل برنامجي،
وأنه هو خلل في بلدي رمز لحظة أنا خطوة
ما وراء الحدود تلك مجموعة، لأنني
لا أعرف ما اذا كان بالضرورة الذهاب إلى تعطل
أو إذا كنت ذاهب لمجرد الحصول على الحظ.
لذلك هذا هو إشكالية لأنه في هذه الحالة، فإنه لا يبدو للعمل
ودعونا يغري مصير هنا، على الرغم من يبدو أن IDE على تحمل قدرا كبيرا
of--
>> هناك نذهب.
في نهاية المطاف.
لذلك أنا الوحيد الذي يمكن أن نرى هذا.
حتى لقد كان الكثير من متعة الكتابة من جملة الفعلية طويلة حقا
أنها تجاوزت بالتأكيد 16 بايت، لأنني
كتبته في هذا طويل متعدد الخطوط مجنون العبارة، ومن ثم لاحظ ما حدث.
حاول البرنامج طباعته وحصلت بعد ذلك خطأ تجزئة
وتجزئة أخطاء هي عندما يحدث شيء مثل هذا
ويقول نظام التشغيل لا، لا يمكن أن تمس تلك الذاكرة.
ونحن في طريقنا لقتل البرنامج تماما.
>> ولذلك فإن هذا يبدو مشكلة.
لقد تحسنت البرنامج حيث على الاقل ان يكون بعض الذاكرة،
ولكن هذا يبدو أن تحصر وظيفة GetString إلى الحصول على
سلاسل من بعض طول محدود 16.
لذلك إذا كنت ترغب في دعم أطول الجمل من 16 حرفا،
ماذا تفعل؟
حسنا، يمكنك زيادة حجم هذا المخزن المؤقت إلى 32
أو أن يبدو نوع من قصيرة.
لماذا لا نجعل فقط انها 1000 ولكن ابعاد.
ما هو رد فعل حدسي لل فقط تجنب هذه المشكلة بجعل
عازلة بلدي أكبر، مثل 1000 حرف؟
من خلال تنفيذ GetString بهذه الطريقة.
ما هو جيد أو سيئ هنا؟
نعم؟
الحضور: إذا كنت ربط ما يصل الكثير الفضاء وأنت لا يستخدمونه،
ثم لا يمكنك تخصيص هذه المساحة.
DAVID مالان: بالتأكيد.
انها الإسراف بقدر ما إذا كنت لا في الواقع تحتاج 900 من تلك بايت
وحتى الآن كنت طالبا لل 1000 في المجموع على أي حال،
كنت مجرد مضيعة للمزيد من الذاكرة على جهاز الكمبيوتر الخاص بالمستخدم مما تحتاج إليه،
وبعد كل شيء، بعض كنت قد واجهت بالفعل
في الحياة أنه عندما كنت تشغيل الكثير من البرامج
وانهم تلتهم الكثير من الذاكرة، هذا يمكن أن تؤثر في الواقع الأداء
وتجربة المستخدم على الحاسوب.
ولهذا النوع من الحل كسول، بالتأكيد، وعلى العكس،
انها الإسراف ليس فقط، ما هي المشكلة لا يزال، حتى إذا قمت بعمل عازلة بلدي
1000؟
نعم؟
>> الحضور: السلسلة هي طول 1001.
DAVID مالان: بالضبط.
إذا سلسلة الخاص بك هو طول 1001، لديك نفس المشكلة،
وحجتي، وأود أن فقط ثم جعله عام 2000،
ولكنك لا تعرف في دفع كيف كبيرة ينبغي أن يكون،
وحتى الآن، وعليك أن تجميع برنامجي قبل السماح يستخدمها الناس وتحميل
ذلك.
لذلك هذا هو بالضبط نوع من الأشياء أن يحاول مكتبة CS50
لمساعدتنا مع وسنقوم وهلة فقط في بعض لتنفيذ الكامنة
هنا، ولكن هذا هو CS50 نقطة C. هذا هو ملف وهذا ما كان على CS50 IDE
كل هذه الأسابيع التي كنت أستعمل.
انها جمعت مسبقا وقمت تم استخدامه تلقائيا
حسب طبيعة وجود اندفاعة L CS50 العلم مع رنة،
ولكن إذا كنت انتقل لأسفل من خلال كل من هذه الوظائف، وهنا GetString،
وفقط لإعطائك تذوق ما يجري،
دعونا نلقي نظرة سريعة على التعقيد النسبي.
انها ليست طويلة السوبر وظيفة، لكننا لم نفعل
يجب أن نفكر مليا في كل كيفية التوجه نحو الحصول على السلاسل.
>> حتى هنا بلدي العازلة وI يبدو تهيئة إلى قيمة خالية.
هذا، بطبيعة الحال، هو الشيء نفسه كنجم شار،
لكنني قررت في تنفيذ مكتبة CS50
أنه إذا نحن في طريقنا لل تكون دينامية تماما،
أنا لا أعرف مسبقا كيف كبيرة ل المستخدمين سلسلة وتريد الذهاب الى الحصول عليها.
لذلك أنا ذاهب لبدء مع مجرد سلسلة فارغة
وانا ذاهب لبناء ما يصل الذاكرة وأنا في حاجة لتناسب سلسلة المستعمل
وإذا كنت لا تملك بما فيه الكفاية، وأنا ذاهب لطرح
نظام التشغيل لمزيد من الذاكرة.
انا ذاهب الى نقل سلسلة من إلى أكبر شريحة من الذاكرة
وانا ذاهب الى اطلاق سراح أو تحرير جزء كبير كاف من الذاكرة
ونحن ذاهبون فقط للقيام بذلك بشكل متكرر.
>> حتى لمحة سريعة، هنا مجرد متغير
مع الذي أنا ذاهب للحفاظ على المسار قدرة عازلة بلدي.
كم بايت يمكنني تناسب؟
وهنا متغير ن مع الذي أنا ذاهب للحفاظ على
تتبع عدد وحدات البايت هي في الواقع في المخزن المؤقت أو أن المستخدم قد كتبته.
إذا كنت لم أر هذا من قبل، كنت يمكن تحديد أن متغير مثل كثافة العمليات
غير الموقعة، والتي كما يوحي اسمها، يعني انها غير سلبي، والسبب في شأنه
أنا في أي وقت تريد عناء مع تحديد أن الباحث ليس مجرد الباحث،
ولكن هذا عدد صحيح غير موقعة؟
انها الباحث غير سالب.
ماذا [غير مسموع] يعني؟
>> الجمهور: انها تصف مبلغ من الذاكرة التي يمكن أن تكون (غير مسموع).
>> DAVID مالان: نعم.
لذلك إذا قلت غير الموقعة، وهذا هو الواقع مما يتيح لك بت واحد من ذاكرة إضافية
ويبدو نوع من سخيفة، ولكن إذا لدينا بت واحد من الذاكرة الإضافية، التي
يعني أن لديك ضعف هذا العدد القيم التي يمكن أن تمثل،
لأنه يمكن أن تكون 0 أو 1.
حتى افتراضيا، عدد صحيح يمكن أن يكون تقريبا السلبية 2000000000 على طول الطريق
حتى الإيجابي 2 مليار دولار.
تلك هي نطاقات كبيرة، ولكن انها لا تزال نوع من الإسراف
إذا كنت لا يهتمون إلا الأحجام، والتي فقط حدسي
يجب أن يكون غير سالب أو إيجابية أو 0، بالاضافة الى ذلك الحين،
لماذا إضاعة 2000000000 القيم الممكنة للأرقام السالبة
إذا كنت أبدا لاستخدامها؟
ذلك بقوله غير موقعة، والآن لي كثافة العمليات يمكن ما بين 0 و ما يقرب من 4 مليارات.
>> حتى هنا مجرد الباحث C لأسباب نحن لن ندخل الآن فقط كما
لماذا من عدد صحيح بدلا من ذلك من شار، ولكن هنا
جوهر ما يحدث على، والبعض منكم
قد تستخدم، على سبيل المثال، وظيفة fgetc حتى في PSET أربعة
أو بعد ذلك، وسنرى ذلك مرة أخرى في مشكلة تشكيل خمس،
fgetc هو لطيف لكاسم نوع، يقترح نوعا من arcanely،
انها وظيفة أن يحصل على حرف وهكذا،
ما تختلف اختلافا جوهريا حول ما نقوم به في GetString
غير أننا لا تستخدم scanf في نفس الطريق.
نحن فقط الزاحف على طول خطوة بخطوة أكثر من كل ما قد كتبته المستخدم في،
لأننا يمكن تخصيص دائما واحدة شار، وهكذا يمكننا دائما بأمان
ننظر شار واحد في وقت واحد، و السحر يبدأ أن يحدث هنا.
أنا ذاهب إلى التمرير لأسفل ل وسط هذه الوظيفة
فقط أن أعرض بإيجاز هذه الوظيفة.
مثل الكثير هناك وظيفة malloc، هناك
وظيفة realloc حيث realloc يتيح لك تخصيص قطعة من الذاكرة
وجعلها أكبر أو أصغر.
قصة طويلة حتى قصيرة ومع موجة من يدي لهذا اليوم،
أعرف أن ما GetString وبه هو انها نوع
تزايد سحرية أو تقلص المخزن المؤقت كمستخدم
أنواع له أو لها سلسلة.
>> إذا كان الأمر كذلك أنواع المستخدم سلسلة قصيرة، هذا الرمز
فقط يخصص ما يكفي الذاكرة لتناسب السلسلة.
إذا كان المستخدم يحتفظ الكتابة كما فعلت ذلك مرارا وتكرارا
ومرة أخرى، حسنا، إذا كان في المخزن في البداية بهذا الحجم
ويدرك البرنامج، ل انتظر لحظة، أنا من الفضاء،
انها سوف يتضاعف حجم المخزن المؤقت
ومن ثم مضاعفة حجم المخزن المؤقت والرمز الذي لا مضاعفة،
إذا كان لنا أن ننظر في الأمر هنا، انها فقط هذا ذكية أونيلينير.
قد لا يكون رأيت هذا النحو من قبل، ولكن إذا كنت أقول يساوي نجم،
هذا هو الشيء نفسه قائلا مرات سعة 2.
لذلك يبقى مجرد مضاعفة قدرة المخزن المؤقت
ثم يقول realloc لإعطاء نفسها أن أكثر من ذلك بكثير الذاكرة.
>> الآن، بوصفها جانبا، هناك هي وظائف أخرى هنا
أننا لن ننظر إلى أي من التفاصيل البعض من أن تظهر في GetInt،
نستخدم GetString في GetInt.
نتحقق من أنه ليس لاغية، والتي، أذكر،
هي قيمة خاصة يعني حدث خطأ ما.
نحن من الذاكرة.
تحقق أفضل لذلك.
ونعود قيمة الحارس.
ولكنني سوف تؤجل إلى تعليق ل لماذا ثم نستخدم هذا ابن عم scanf
دعا sscanf واتضح أن scanf sscanf، أو سلسلة،
يتيح لك إلقاء نظرة على الخط الذي تمت كتابة المستخدم في وتتيح لك
نحللها أساسا وما أنا به هنا هو أنا أقول sscanf،
تحليل كل ما لديه المستخدم كتبته في وتأكد٪ ط،
هناك عدد صحيح في ذلك، ونحن سوف لا ندخل اليوم بالضبط لماذا هناك أيضا
و٪ ج هنا، ولكن هذا باختصار تسمح لنا لاكتشاف إذا كان قد كتبته المستخدم
في شيء مزيف بعد الرقم.
لذلك السبب الذي GetInt وGetString اقول لكم لإعادة المحاولة، إعادة المحاولة، إعادة المحاولة
لأن كل من هذا الرمز لدينا كتب،
انها نوع من النظر في إدخال المستخدم في التأكد من انها رقمية تماما
أو انها العائمة الفعلي قيمة النقطة أو ما شابه ذلك،
اعتمادا على ما قيمة العمل الذي تستخدمه.
>> يا للعجب.
حسنا.
كان ذلك الفم ولكن النقطة هنا
أن السبب كان لدينا تلك العجلات التدريب على
غير أنه في أدنى مستوى، هناك أشياء كثيرة فقط أن
يمكن ان تتعرض له اننا نريد للتعامل مع استباقي
تلك الأشياء بالتأكيد في أقرب أسابيع من الصف،
ولكن الآن مع PSET أربعة وخمسة وPSET ما وراء سترى أنه من أكثر بمعزل
لك ولكن أيضا كنت أكثر قدرة حل هذا النوع من المشاكل
نفسك.
أي أسئلة على GetString أو GetInt؟
نعم؟
>> الحضور: لماذا مضاعفة قدرة المخزن المؤقت
بدلا من مجرد زيادة من قبل المبلغ المحدد؟
>> DAVID مالان: سؤال جيد.
لماذا نحن مضاعفة طاقة المخزن المؤقت مقابل
لمجرد زيادته بعض قيمة ثابتة؟
لقد كان قرارا التصميم.
قررنا أن مجرد لأنه يميل إلى أن تكون مكلفة للوقت من الحكمة قليلا لنسأل
نظام التشغيل للذاكرة، ونحن لم
تريد في نهاية المطاف الدخول في وضع سلاسل كبيرة
أننا نطالب نظام التشغيل مرارا وتكرارا
ومرة أخرى، ومرة ​​أخرى في تعاقب سريع للذاكرة.
لذلك قررنا للتو، إلى حد ما تعسفي لكننا نأمل معقول،
هذا، وتعلمون ما، دعونا محاولة نسبق الاحداث
وتبقي فقط مضاعفة بحيث نحن تقليل كمية مرات
علينا أن ندعو malloc أو realloc، ولكن الحكم الكلي
دعوة في غياب معرفة ما قد المستخدمين تريد اكتب في.
في كلا الاتجاهين يمكن أن يكون قابل للجدل.
حسن القول.
>> لذلك دعونا نلقي نظرة على زوجين من الآثار الجانبية الأخرى من الذاكرة،
الأشياء التي يمكن أن تسوء والأدوات التي يمكنك
استخدام للقبض على هذه الأنواع من الأخطاء.
اتضح لكم جميعا، على الرغم من وقد check50 وقال ليس كثيرا كما كنت،
تم كتابة عربات التي تجرها الدواب كود منذ أسبوع واحد،
حتى لو كانت جميع الاختبارات check50 هي مرت، وحتى لو كنت وTF الخاص بك
نحن واثقون أن السوبر يعمل التعليمات البرمجية الخاصة بك على النحو المنشود.
وكانت التعليمات البرمجية عربات التي تجرها الدواب أو معيبة في أن كل واحد منكم،
في استخدام المكتبة CS50، تم تسريب الذاكرة.
لقد تم طرح نظام التشغيل للذاكرة في معظم البرامج
كنت قد كتبت، ولكن كنت قد لم تعط في الواقع مرة أخرى.
كنت قد دعا GetString وGetInt وGetFloat،
ولكن مع GetString، قمت لم يطلق unGetString أو إعطاء
عودة سلسلة أو ما شابه ذلك، ولكن رأيناه أن GetString يفعل تخصيص الذاكرة
عن طريق malloc أو هذا وظيفة realloc، الذي هو مجرد
تشبه الى حد بعيد في الروح، وحتى الآن، كنا
طرح نظام التشغيل ل الذاكرة وذاكرة مرارا وتكرارا
لكنه لم يعطيها ظهره.
>> الآن، بوصفها جانبا، اتضح أن عند إنهاء البرنامج، كل من الذاكرة
يتم تحرير تلقائيا.
حتى انها لم تكن صفقة ضخمة.
انها لن كسر IDE أو الابطاء،
ولكن عندما تفعل برامج عموما تسرب الذاكرة
وانهم الترشح لفترة طويلة.
إذا كنت قد رأيت من أي وقت مضى قليلا غبي كرة الشاطئ في نظام التشغيل ماك أو الساعة الرملية
على ويندوز حيث انها نوع من تباطؤ أو التفكير أو التفكير
أو يبدأ فقط حقا ان يتباطأ الى الزحف،
فإنه ربما جدا يمكن أن يكون نتيجة حدوث تسرب للذاكرة.
المبرمجين الذين كتب البرنامج الذي تستخدمه
نطلب من نظام التشغيل للذاكرة كل بضع دقائق، كل ساعة.
ولكن إذا كنت تقوم بتشغيل البرنامج، حتى لو كان
مصغر في جهاز الكمبيوتر الخاص بك لساعات أو أيام على نهاية،
هل يمكن أن نطلب أكثر وأكثر الذاكرة والواقع أبدا استخدامه
وهكذا التعليمات البرمجية الخاصة بك قد يكون، أو برامج قد تسرب الذاكرة،
وإذا كنت تبدأ في تسرب الذاكرة، هناك ذاكرة أقل للبرامج الأخرى،
وتأثير ل إبطاء كل شيء إلى أسفل.
>> الآن، وهذا هو الآن واحد من برامج أبشع
سيكون لديك فرص لتشغيل في CS50 بقدر
كما انتاجها هو أكثر مقصور على فئة معينة من ورنة أو إجراء أو أي من الأمر
برامج سطر قمنا تشغيل من قبل ولكن الحمد لله، وجزءا لا يتجزأ من انتاجها
هو بعض النصائح المفيدة التي السوبر ستكون مفيدة سواء للPSET أربعة
أو بالتأكيد PSET خمسة.
حتى valgrind هو أداة التي يمكن استخدامها للبحث
لتسرب الذاكرة في البرنامج.
انها بسيطة نسبيا لتشغيل.
تشغيل valgrind وبعد ذلك، حتى على الرغم من انها قليلا مطول،
اندفاعة الاختيار تسرب اندفاعة يساوي كامل، ثم نقطة
خفض واسم البرنامج.
لذلك سوف valgrind ثم تشغيل البرنامج وفي النهاية من البرنامج
تشغيل قبل أن يتم إنهاء يعطيك موجه آخر،
انها تسير لتحليل الخاصة بك البرنامج في حين انه تم تشغيل
واقول لكم هل تسرب أي ذاكرة والأفضل من ذلك،
هل لمس الذاكرة التي لم ملكا لك؟
لا يمكن أن قبض كل شيء، لكنه جيد جدا في اصطياد معظم الأشياء.
>> حتى هنا مثال على بلدي وجود المدى هذا البرنامج، وبعد المدى valgrind،
على برنامج يسمى الذاكرة، وانا ذاهب
لتسليط الضوء على الخطوط التي هي في نهاية المطاف من مصلحة لنا.
ولذلك لا يوجد المزيد من الانحرافات بعد أن قمت بحذفها من الشريحة.
ولكن دعونا نرى ما هذا البرنامج قادر على إخبارنا.
انها قادرة على قول لنا أشياء مثل الكتابة غير صالح من حجم 4.
وبعبارة أخرى، إذا كنت على اتصال الذاكرة، على وجه التحديد 4 بايت من الذاكرة
التي يجب أن لا يكون، valgrind ان اقول لكم ان.
الكتابة غير صالح من حجم 4.
كنت لمست أربعة بايت التي يجب أن لا يكون.
أين يمكنك أن تفعل ذلك؟
هذا هو الجمال.
ذاكرة نقطة ج خط 21 هو المكان الذي ثمل وهذا هو السبب في أنه من المفيد.
مثل الكثير من GDB، يمكن أن تساعدك نقطة لك في الخطأ الفعلي.
>> الآن، هذا واحد قليلا أكثر مطول، إن لم يكن مربكا.
40 بايت في 1 كتل هي بالتأكيد خسر في سجل خسارة 1 من 1.
ماذا يعني ذلك؟
حسنا، بل يعني فقط أنك سألت ل 40 بايت وأنت لا اعادها.
قمت بالاتصال malloc أو قمت بالاتصال GetString ونظام التشغيل
أعطاك 40 بايت، لكنك أبدا إطلاق سراح أو الإفراج عنهم تلك الذاكرة،
ولكي نكون منصفين، لقد تبين أبدا كيفية رد الجميل الذاكرة.
تبين هناك السوبر وظيفة بسيطة تسمى الحرة.
يأخذ وسيطة واحدة، والشيء تريد تحرير أو رد الجميل،
ولكن 40 بايت، على ما يبدو، في هذا البرنامج
قد فقدت في خط 20 من ذاكرة نقطة مئوية.
>> لذلك دعونا نرى هذا البرنامج.
انها فائقة عديمة الفائدة.
وهو يدل فقط هذا الخطأ بعينه.
لذلك دعونا نلقي نظرة.
هنا الرئيسية والأساسية، اشعار المكالمات وظيفة تسمى عوائد F وبعد ذلك.
لذلك ليس كل ما مثيرة للاهتمام.
ماذا و تفعل؟
لاحظ أنني لم يكلف نفسه عناء مع النموذج.
أردت أن تبقى رمز الحد الأدنى قدر الإمكان.
لذلك أضع و فوق الرئيسي و هذا شيء طيب، وبالتأكيد،
برامج قصيرة مثل هذه.
لذلك و لا يرجع أي شيء ويفعل لا تأخذ أي شيء، ولكنه يفعل ذلك.
ويعلن، يشبه إلى حد كبير في المثال بينكي،
مؤشر يسمى س ما يجري لتخزين عنوان عدد صحيح.
لذلك هذا هو الجانب الأيسر.
في اللغة الإنجليزية، ما هو الجانب الأيمن تفعل؟
أي واحد؟
ما هذا فعل بالنسبة لنا؟
نعم؟
>> الحضور: (غير مسموع) أضعاف حجم وكثافة العمليات
الذي هو 10 أضعاف (غير مسموع)
DAVID مالان: الخير واسمحوا لي أن ألخص.
ذلك تخصيص مساحة كافية لمدة 10 الأعداد الصحيحة أو 10، ما هو حجم وكثافة العمليات،
انها أربعة بايت، حتى 10 مرات 4 هو 40، بحيث الجانب الأيمن أن لدي
التأكيد عليها هي تعطيني 40 بايت و تخزين عنوان البايت الأول
إلى العاشر.
والآن أخيرا، وهنا هو المكان هذا البرنامج هو عربات التي تجرها الدواب، ما هو
الخطأ في خط 21 على أساس هذا المنطق؟
ما هو الخطأ مع خط 21؟
نعم؟
الحضور: لا يمكنك ذلك مؤشر إلى العاشر (غير مسموع).
DAVID مالان: نعم.
أنا لا ينبغي أن المؤشر في العاشر من هذا القبيل.
حتى نحويا، وهذا موافق.
ما هو طيف هو، مثلما تفعل يمكن علاج اسم مجموعة
كما لو انها مؤشر، وبالمثل يمكنك علاج المؤشر كما لو انها
مجموعة، وهكذا يمكنني نحويا أقول العاشر قوس شيء، العاشر قوس ط،
ولكن 10 هو إشكالية.
لماذا؟
>> الحضور: لأنه ليس في الداخل.
>> DAVID مالان: انها ليست داخل هذا جزء من الذاكرة.
ما هو أكبر قيمة وأود أن يكون وضع في تلك الأقواس المربعة؟
9، 0 إلى 9.
بسبب الصفر الفهرسة.
لذلك من 0 إلى 9 سيكون على ما يرام.
قوس 10 ليست جيدة و ولكن، على الرغم من التذكير، في كل مرة
ويبدو لي أن محاولة جعل CS50 IDE تحطم عن طريق الكتابة في القيم وهمية،
لم تتعاون دائما، وبالفعل، كنت كثيرا ما
محظوظا لمجرد أن نظام التشغيل لا
لاحظت أنك من أي وقت مضى حتى قليلا تمرير بعض قطعة من الذاكرة،
لأنك بقيت ضمن تقنيا الجزء الخاص بك، ولكن أكثر على ذلك
في فئة أنظمة التشغيل، وهكذا شيئا من هذا القبيل
يمكن أن تنتقل بسهولة جدا لم يتم كشفها.
البرنامج الخاص بك أبدا لتحطم باستمرار ولكن ربما مرة واحدة في لحظة.
>> وذلك دعونا نحاول valgrind على هذا، وهنا
حيث سنقوم الحصول على طغت من الناتج حظات.
وهكذا جعل الذاكرة الاختيار تسرب valgrind يساوي كامل ذاكرة نقطة مائل.
وهنا لماذا أعدك هذا من شأنه أن تطغى.
وهنا ما valgrind، وهنا ما مبرمج، بضع سنوات الأجوا
قررت أنه سيكون فكرة جيدة لإخراج لتبدو وكأنها.
لذلك دعونا معنى هذا.
لذلك كل وسيلة على اليد اليسار الجانب من دون سبب وجيه
هو معرف العملية للبرنامج نحن تشغيل فقط، المعرف الفريد
لبرنامج ركضنا فقط.
حذفنا أن من الشريحة، ولكن هناك
هي بعض المعلومات المفيدة هنا.
>> دعونا انتقل إلى أعلى إلى أعلى.
هنا حيث بدأنا.
لذلك ليس كل شيء أن الكثير من الانتاج.
وهنا أن الكتابة غير صالح من حجم 4 على خط 21.
حسنا، ما هو خط 21؟
وكان خط 21 بالضبط هذا وكان من المنطقي
انني في صحيحا كتابة 4 بايت لأنني
في محاولة لوضع هذا صحيح، التي يمكن أن تكون أي شيء،
يحدث لمجرد أن يكون الصفر، ولكن أحاول
لوضعها في موقع لا ينتمي لي.
وعلاوة على ذلك، إلى هنا، 40 بايت في واحد وفقدت كتل بالتأكيد في سجل 1.
هذا هو لأنه عندما أدعو malloc هنا، لم أكن في الواقع تحرير الذاكرة.
>> فكيف يمكننا حل هذه المشكلة؟
اسمحوا لي أن نمضي قدما وتكون أكثر أمانا قليلا والقيام 9 هناك، واسمحوا لي هنا مجانا السينية.
هذه هي وظيفة جديدة لهذا اليوم.
إذا أنا الآن أعد جعل ذاكرة نقطة مائل، دعونا تشغيل valgrind عليه مرة أخرى،
تحقيق أقصى قدر من نافذتي وهاهنا.
الآن، انها جيدة.
يدفنون الخبر السار في كل هذا الانتاج.
وكانت جميع الكتل كومة الحرة.
سوف نعود إلى ما كومة هو، ولكن أي تسرب ممكنة.
لذلك هذا هو مجرد أداة لمجموعة من الأدوات الخاصة بك
والتي يمكنك البدء في الآن تجد أخطاء من هذا القبيل.
>> ولكن دعونا نرى ما أكثر يمكن أن تذهب الخطأ هنا.
دعونا الآن الانتقال إلى حل فعلا مشكلة.
بوصفها جانبا، إذا كان هذا سوف يخفف قليلا من الارتباك أو التوتر،
هذا هو الآن مضحك.
نعم.
هذا أمر جيد جدا.
لأن مؤشرات هي عناوين وعناوين
عادة ما تكون عن طريق اتفاقية مكتوبة مع ست عشرية.
ها، ها، وهذا هو مضحك الآن.
على أية حال، لذلك دعونا الآن حل فعلا مشكلة.
وقد كان هذا عظمى، السوبر على مستوى منخفض حتى الآن،
ويمكننا أن نفعل في الواقع مفيدة أشياء مع هذه التفاصيل على مستوى منخفض.
>> لذلك قدمنا ​​بضعة أسابيع منذ مفهوم صفيف.
مجموعة لطيفة ل انه من الصعب لتنظيف نظامنا
لأنه إذا أردنا أن إرسال بريد البرنامج مع الطلاب متعددة
أو أسماء متعددة والمنازل و مساكن الطلبة والكليات وكل ذلك،
نحن يمكن تخزين كل شيء أكثر نظيف داخل صفيف.
لكن اقتراح الجانب السلبي واحدة حتى الآن من صفيف.
حتى لو كنت لا تعاني بنفسك في أحد البرامج، فقط غريزي،
ما هو الشيء سيئة حول صفيف، ربما؟
أسمع بعض لغط.
الحضور: من الصعب لتغيير حجم.
DAVID مالان: من الصعب لتغيير حجم.
لا يمكنك تغيير حجم من صفيف، في الواقع، في حد ذاته
في C. يمكنك تخصيص مجموعة أخرى، نقل كل شيء من القديم
في جديد، والآن لدينا بعض مساحة إضافية،
ولكنها ليست مثل اللغة مثل جافا أو بيثون
أو أي عدد آخر اللغات التي بعضكم
قد تكون مألوفة حيث كنت يمكن فقط الحفاظ على إضافة أشياء
الغثيان وحتى نهاية صفيف.
عندما يكون لديك مجموعة من حجم 6، وهذا هو حجمها،
والكثير من مثل هذه الفكرة في وقت سابق وجود منطقة عازلة من حجم معين،
لديك لتخمين للخروج من البوابة ما حجم المساحة التي تريد أن تكون؟
إذا كنت تخمين كبير جدا، كنت إضاعة الفضاء.
إذا كنت تخمين صغيرة جدا، كنت لا يمكن تخزين هذه البيانات، على الأقل
دون الكثير أكثر من ذلك العمل.
>> حتى اليوم، وذلك بفضل المؤشرات، نستطيع بدء ترقيع المخصصة الخاصة بنا
هياكل البيانات، وفي الواقع، وهنا شيء
التي تبدو أكثر قليلا خفي للوهلة الأولى،
ولكن هذا هو ما سوف ندعو مرتبط القائمة، واسم من نوعه يلخص
ذلك.
انها قائمة من الأرقام، أو في هذه الحالة، وقائمة من الأرقام،
ولكنها قد تكون قائمة في أي شيء، ولكن هو ربطها معا عن طريق الأسهم،
وتأخذ مجرد تخمين مع ما تقنية
نحن ذاهبون لتكون قادرة لغرزة معا،
نوع من مثل الفشار بخيط، مرتبط قوائم المستطيلات هنا؟
أرقام لها؟
ما هي ميزة اللغة الأساسية؟
>> الحضور: مؤشر.
>> DAVID مالان: مؤشر.
لذلك كل من هذه السهام يمثل هنا مؤشر أو مجرد عنوان.
لذلك وبعبارة أخرى، إذا أريد لتخزين قائمة من الأرقام،
لا أستطيع أن مجرد تخزينه إذا أريد القدرة على النمو وتقليص
هيكل البيانات الخاصة بي في صفيف.
لذلك أنا بحاجة إلى أن يكون قليلا المزيد من التطور،
ولكن لاحظ أن هذا الصورة يوحي نوع من
أنه إذا كنت قد حصلت للتو على المواضيع قليلا ربط كل شيء معا،
ربما ليس من الصعب أن تجعل الفضاء بين اثنين من هذه المستطيلات
أو اثنين من هذه العقد، وسنبدأ دعوتهم، وضعت في عقدة جديدة،
وبعد ذلك مع بعض موضوع جديد، فقط التخلص من العقد الثلاثة معا،
أول واحد، واحد آخر، واحد الذي قمت بإدراجه فقط في الوسط.
>> والواقع قائمة مرتبطة، خلافا للمجموعة، ودينامية.
ويمكن أن تنمو وما في وسعها يتقلص وأنت لا
أن تعرف أو رعاية مسبقا كيف بيانات كثيرة كنت على وشك أن تخزين،
ولكن اتضح لدينا أن يكون قليلا حذرا حول كيفية تنفيذ ذلك.
لذلك دعونا أولا ننظر في كيفية تنفيذ واحدة من هذه المستطيلات الصغيرة.
فإنه من السهل لتنفيذ عدد صحيح.
كنت أقول الباحث n ثم يمكنك الحصول على 4 بايت لعدد صحيح،
ولكن كيف يمكنني الحصول على الباحث، الذي يطلق عليه ن، ثم مؤشر، دعونا نسميها المقبل.
يمكننا أن نطلق على هذه أشياء أي شيء نريد
ولكن انا بحاجة الى بنية البيانات المخصصة.
نعم؟
>> الحضور: علامة العطف (غير مسموع).
>> DAVID مالان: حتى العطف سوف نستخدم ل الحصول على عنوان عقدة يحتمل.
ولكننا نحتاج آخر سمة من سمات C من أجل
أن تعطيني القدرة على خلق هذا المستطيل المخصص، هذه العادة
متغير اذا صح التعبير، في الذاكرة.
الحضور: A البنية.
DAVID مالان: A البنية.
أذكر من الأسبوع الماضي، قدمنا بنية، هذه الكلمة الرئيسية بسيطة نسبيا
أن يتيح لنا تقديم مثل هذه الامور.
لم C لا تأتي مع البيانات ودعا هيكل الطلاب.
لأنه يأتي مع الباحث وتعويم وشار و هذا، ولكنه لا يأتي مع الطلاب،
لكننا يمكن أن تخلق نوع بيانات الطالب، هيكل الطالب، مع بناء الجملة هذا
هنا.
وسترى هذا مرارا وتكرارا.
لذلك لا داعي للقلق حول حفظ الكلمات الرئيسية،
ولكن الكلمة التي هو مهم هو مجرد حقيقة أن قلنا البنية
وبعد ذلك يطلق عليه الطالب وداخل الطالب كان اسم ومنزل
أو النوم أو ما شابه ذلك.
>> وحتى الآن اليوم، دعونا نقترح هذا.
واضاف لقد بضع كلمات، ولكن إذا أريد لتنفيذ هذا المستطيل هذا
حصلت كل من الباحث و مؤشر، وانت تعرف ما، وأنا
الذهاب لاعلان بنية تسمى العقدة.
أنا أيضا، داخل منه، سأقول أن عقدة، هذا المستطيل، لديها كثافة العمليات
ونحن سوف يطلق عليه ن و أنه يحتوي على مؤشر المقبل.
وهذا هو مطول قليلا، ولكن إذا كنت تفكر في ذلك،
الأسهم التي كانت في الصورة قبل لحظة هي من نوع البيانات؟
حيث كل تلك السهام يتم الإشارة إلى أي نوع من هياكل البيانات؟
انها ليست فقط لافتا إلى int في حد ذاته.
انها لافتا إلى شيء مستطيل كامل
وهذا الشيء مستطيلة، قلنا، ويسمى عقدة.
وهكذا لدينا نوع من ل تحدد بشكل متكرر مثل هذا
أن عقدة، نقول، سوف تحتوي على كثافة دعا ن
ومؤشر يسمى القادمة و نوع من بنية البيانات التي
أن يشير مؤشر على ما يبدو سيكون العقدة البنية.
>> لذلك هذا هو مطول بشكل مزعج ومجرد أن يكون متحذلق،
السبب في أننا لا نستطيع أقول هذا، والذي بصراحة
يتطلع الكثير أكثر قابلية للقراءة، لأن أذكر أن C قراءة
أشياء الأعلى إلى الأسفل، من اليسار إلى اليمين.
انها ليست حتى نحصل على منقوطة أن العقدة الكلمة موجود بالفعل.
لذلك إذا أردنا أن يكون هذا النوع من إشارة الدورية داخل البيانات
هيكل، علينا أن نفعل هذا، حيث نقول العقدة البنية في القمة، التي
يعطينا وسيلة أطول واصفا ذلك الشيء، ثم داخل نقول العقدة البنية،
ثم في السطر الأخير جدا نقول، كل الحق، C، بالمناسبة،
مجرد دعوة هذه اللعنة كاملة الشيء عقدة ووقف
باستخدام بنية الكلمة تماما.
لذلك هذا هو مجرد نوع من نحوي خدعة التي تسمح لنا في نهاية المطاف خلق
شيء يبدو تماما مثل هذا.
>> حتى لو افترضنا الآن في وسعنا تنفيذ هذا الشيء في C،
كيف يمكننا فعلا بدء تعبر هذا؟
حسنا، في الواقع، كل ما علينا فعله هو تكرار من اليسار إلى اليمين وعادل
نوع من إدراج العقد أو حذف العقد أو البحث عن الأشياء أينما نريد،
ولكن للقيام بذلك، دعونا نمضي قدما وجعل الامور قليلا أكثر واقعية لأن هذا
كان السوبر على مستوى منخفض حتى الآن.
أي شخص يود أن يكون حرفيا لأول مرة؟
حسنا.
تأتي على ما يصل.
ما اسمك؟
>> DAVID: ديفيد.
DAVID مالان: ديفيد.
تشرفت بمقابلتك.
أنا أيضا.
حسنا.
ونحن في حاجة الى عدد 9.
ليست جيدة كما لأول مرة، ربما.
OK، رقم 9.
عدد 17، من فضلك.
واسمحوا لي أن أعود قليلا أبعد من ذلك.
عدد 22، من فضلك، و كيف حول ابعد من العودة
إذا أستطيع أن أرى أي يد مع كل ضوء أو لا.
يجري تطوع شخص هناك.
هل تريد الخروج؟
الساعد الخاص بك هو الذهاب قسرا.
OK، 17.
22.
26 ونازلة.
أي شخص آخر مثل ل forcefully-- تعال على ما يصل.
متطوعة الفعلي.
>> بسرعة جدا، وإذا يا رفاق يمكن أن يرتب
أنفسكم ترغب فقط العقد على الشاشة.
شكرا.
وعليك أن تكون 26.
كل المقدمات الصحيحة وسريعة.
لذلك أنا ديفيد وأنت أيضا؟
DAVID: ديفيد.
DAVID مالان: وأنت؟
JAKE: جيك.
سو: سو.
ALEX: أليكس.
رافاييل: رافائيل.
TAYLOR: تايلور.
DAVID مالان: تايلور.
ممتاز.
لذلك هذه هي متطوعينا لهذا اليوم والمضي قدما
والتحول في هذا الطريق قليلا، وفقط على المضي قدما والحفاظ على
عقد الأرقام الخاصة بك كما كنت أو الخاص أول علامة واستخدام اليد اليسرى،
والمضي قدما في تنفيذ فقط هذه السهام، فقط
بحيث يدك اليسرى هي حرفيا مشيرا في الوقت ذاته كل ما يجب أن يشير
في، وتعطي لنفسك بعض غرفة بحيث يمكننا أن نرى ذراعيك بصريا في الواقع
لافتا، ويمكنك الإشارة فقط نوع من في الأرض على ما يرام.
>> حتى هنا لدينا قائمة مرتبطة واحد، اثنان، ثلاثة، أربعة، خمسة العقد في البداية،
وتلاحظ لدينا هذا خاص المؤشر في بداية الذين ل
المفتاح لدينا للحفاظ على المسار قائمة طول كلها بطريقة أو بأخرى.
هؤلاء الرجال، على الرغم من انهم اليسار إلى اليمين، العودة إلى الوراء في الذاكرة،
أنها يمكن أن تكون في الواقع في أي مكان في ذاكرة الكمبيوتر.
حتى هؤلاء الرجال يمكن أن يكون الوقوف في اي مكان على المسرح
وهذا شيء طيب، طالما انهم مشيرا فعلا في بعضها البعض،
ولكن لابقاء الامور نظيفة وبسيطة، وسوف نقوم
مجرد رسم لهم من اليسار إلى اليمين مثل هذا، ولكن يمكن أن يكون هناك فجوات هائلة
في ما بين هذه العقد.
>> الآن، إذا كنت ترغب في إدراج فعلا بعض قيمة جديدة، دعونا نمضي قدما ونفعل ذلك.
لدينا فرصة الآن لاختيار عقدة أخرى.
أقول دعونا نبدأ مع mallocing 55.
شخص ما من شأنه تمانع يجري malloc؟
OK، وتأتي على ما يصل.
ما اسمك؟
قوس قزح: قوس قزح.
DAVID مالان: قوس قزح؟
حسنا.
Malloc قوس قزح.
تأتي على ما يصل.
حتى الآن لدينا أن نسأل أنفسنا حسابيا حيث يمكن أن نضع 55.
لذلك كل منا يعرف، من الواضح، حيث أنها ربما
ينتمي إذا كنا نحاول للحفاظ على هذا فرز
وإذا كنت الرجال قد يستغرق واحد خطوة الى الوراء لذلك نحن لا تسقط
المرحلة، التي من شأنها أن تكون كبيرة.
لذلك فعلا، قوس قزح، البدء من جديد هنا معي،
لأننا مثل الكمبيوتر الآن يمكن ترى سوى متغير واحد في وقت واحد.
حتى إذا كان هذا هو العقدة الأولى.
لاحظ أنه ليس عقدة، انه مجرد مؤشر،
وهذا هو السبب في انه وضع ليكون فقط من حجم مؤشر، وليس
واحدة من تلك المستطيلات كاملة.
لذلك نحن ذاهبون للتحقق في كل التكرار هو 55 أقل من 9؟
لا.
هو 55 أقل من 17؟
لا.
أقل من 22؟
أقل من 26؟
أقل من 34؟
وحتى الآن، من الواضح قوس قزح ينتمي في النهاية.
لكي نكون واضحين، وما كان اسمك، تايلور؟
>> TAYLOR: تايلور.
DAVID مالان: حتى بين تايلور اليد اليسرى ويديه قوس قزح هنا،
الذي بيده تحتاج للإشارة إلى ما في لإدراج 55 في هذه القائمة؟
ماذا علينا أن نفعل؟
نعم؟
>> الحضور: يد تايلور يجب أن نشير اليسار.
>> DAVID مالان: بالضبط.
حتى إدخال عقدة في نهاية القائمة
هو بسيط جدا لتايلور فقط يجب أن نشير، بدلا من في الأرض
أو أننا سوف يطلق عليه باطل، باطل هو نوع من غياب
من مؤشر أو خاص مؤشر الصفر، وكنت
الذهاب الى نقطة مع يسارك اليد في قوس قزح ثم قوس قزح،
حيث ينبغي يسارك ومن ناحية ربما يشير؟
أسفل.
انها ليست جيدة إذا يدها هو نوع من لافتا من هنا أو نوعا من أي
اي طريق.
سيعتبر أن قيمة القمامة،
ولكن إذا كانت يشير إلى بعض القيمة المعروفة، وسوف نقوم
نسميها صفر أو باطل، وهذا موافق لأن لدينا مصطلح في هذا
ونحن نعرف الآن قائمة كاملة.
>> لذلك ما هو آخر حالة بسيطة نسبيا؟
يمكننا malloc 5؟
تأتي على ما يصل.
ما اسمك؟
TIFFANY: تيفاني.
DAVID مالان: أنا آسف؟
TIFFANY: تيفاني.
DAVID مالان: تيفاني.
حسنا.
وقد malloced تيفاني بقيمة 5.
تأتي على ما يصل.
هذا واحد من السهل نسبيا أيضا، ولكن دعونا النظر في ترتيب العمليات الآن.
كان من السهل جدا مع تايلور في نهاية المطاف.
عدد 5 هو بالطبع أقل من 9 وهكذا لدينا ديفيد، لدينا تيفاني،
وما هو اسمك؟
>> JAKE: جيك.
>> DAVID مالان: جيك.
تيفاني، جيك، وديفيد.
الذي بيده ينبغي تحديثها أولا؟
ماذا تريد أن تفعل هنا؟
هناك بضعة السبل الممكنة، ولكن هناك أيضا واحد أو طرق أكثر خاطئة.
>> الحضور: ابدأ مع أقصى اليسار.
>> DAVID مالان: ابدأ مع أقصى اليسار.
من هو أقصى اليسار هنا بعد ذلك؟
الحضور: أولا.
>> DAVID مالان: OK.
بحيث تبدأ مع أول وأين أنت تريد تحديث يد داود أن تكون؟
الجمهور: نحو 5.
DAVID مالان: OK.
وكان داود، نقطة في خمس أو تيفاني هنا، والآن؟
>> الحضور: تيفاني يشير إلى 9؟
DAVID مالان: ممتازة، إلا في بينكي وانخفض رأس مجرد نوع من الخروج، أليس كذلك؟
لأن ما هو الخطأ في هذه الصورة حرفيا؟
الحضور: لا شيء يشير.
DAVID مالان: لا شيء مشيرا إلى جيك الآن.
لقد الأيتام حرفيا 9 و 17، ولقد حرفيا
تسربت كل من هذه الذاكرة، لأنه من خلال تحديث يد داود لأول مرة، وهذا
غرامة بقدر ما هو صحيح مشيرا في تيفاني الآن،
ولكن اذا لم يكن احد كان التبصر إلى نقطة في جيك،
ثم اننا فقدنا مجمل تلك القائمة.
لذلك دعونا التراجع.
لذلك كان هذا أمر جيد ل رحلة فوق ولكن دعونا تصحيح الآن.
ما يجب أن نقوم به أولا بدلا من ذلك؟
نعم؟
>> الحضور: يجب تيفاني نقطة في 9؟
DAVID مالان: لا أستطيع الحصول على ذلك قريب منك.
الذي ينبغي أن نشير في 9؟
>> الحضور: تيفاني.
>> DAVID مالان: حسنا.
لذلك ينبغي تيفاني النقطة الأولى في 9.
لذلك ينبغي أن تأخذ تيفاني على القيمة متطابقة
لداود الذي يبدو زائدة عن الحاجة لحظة،
لكن لا بأس لأنه الآن ثاني خطوة، ونحن يمكن تحديث يد داود
للإشارة إلى تيفاني، ثم إذا نحن مجرد نوع من الامور نظيفة
وكأن هذا هو نوع من مثل الربيع، الآن هذا الإدراج الصحيح.
ممتاز جدا.
حتى الآن نحن تقريبا هناك.
دعونا إدراج نهائي واحد قيمة مثل قيمة 20.
لو استطعنا malloc المتطوعين النهائي واحد؟
تأتي على ما يصل.
لذلك هذا واحد هو أكثر من ذلك قليلا صعبة.
ولكن في الحقيقة، رمز نحن الكتابة، ولو لفظيا،
هو مجرد وجود مثل حفنة من إذا كانت الظروف الآن، أليس كذلك؟
كان لدينا حالة فحص إذا كان ينتمي
في النهاية، ربما البداية.
نحن بحاجة إلى نوع من حلقة ل العثور على بقعة في الوسط.
لذلك دعونا نفعل ذلك مع ما هو اسمك؟
>> ERIC: اريك.
>> DAVID مالان: اريك؟
اريك.
تشرفت بمقابلتك.
لذلك لدينا 20.
أقل من خمسة؟
لا.
أقل من تسعة؟
لا.
أقل من 17؟
لا.
حسنا.
ينتمي إليها هنا و أسماء الخاصة بك مرة أخرى؟
سو: سو.
DAVID مالان: سو.
ALEX: أليكس.
DAVID مالان: سو، أليكس، و؟
ERIC: اريك.
DAVID مالان: اريك.
الأيدي التي تحتاج إلى الحصول على تحديث أولا؟
>> الحضور: اريك.
حسنا.
حتى اريك أن أشير إلى أين؟
في 22.
جيد.
والآن ما هي الخطوة التالية؟
يمكن مقاضاة ثم أشر على اريك والآن، إذا كنت الرجال فقط
جعل بعض الغرف التي على ما يرام بصريا، ونحن الآن قد فعلت الإدراج.
لذلك دعونا ننظر الآن هذا السؤال ولكن شكرا جزيلا لمتطوعينا.
عمل جيد جدا.
يمكنك أن تبقي تلك، إذا أردت.
ونحن لدينا هدية فراق جميلة إذا كنت ترغب كل لاتخاذ الكرة الإجهاد.
اسمحوا لي أن تمرير هذا إلى أسفل.
فما هي الوجبات الجاهزة من هذا؟
ويبدو أن هذا مدهش بقدر ما لدينا الآن
عرض بديل ل مجموعة أن لا يقتصر ذلك
لمجموعة من بعض حجم ثابت.
يمكن أن تنمو بشكل حيوي.
>> ولكن مثل الكثير رأيناه في الاسابيع الماضي، ونحن لم تحصل على أي شيء مجانا،
مثل بالتأكيد هناك مفاضلة هنا.
حتى مع الاتجاه الصعودي للمرتبط قائمة، وهذا هو دينامية؟
هذه القدرة على النمو وبصراحة، يمكننا القيام به الحذف
ونحن يمكن أن يتقلص حسب الحاجة.
ما هو الثمن نحن دفع؟
ضعف مساحة كبيرة، أولا وقبل كل شيء.
اذا نظرتم الى الصورة، لم يعد أنا تخزين قائمة من الأعداد الصحيحة.
أنا تخزين قائمة الأعداد الصحيحة بالاضافة الى مؤشرات.
لذلك أنا مضاعفة مقدار المساحة.
الآن، ربما هذا ليس من هذا القبيل صفقة كبيرة 4 بايت و 8 بايت،
ولكنه يمكن بالتأكيد إضافة حتى لمجموعات كبيرة من البيانات.
ما هو الجانب السلبي آخر؟
نعم؟
>> الحضور: لدينا ل اجتياز منهم واحدا تلو الآخر.
DAVID مالان: نعم.
علينا أن تجتاز منهم واحدا تلو الآخر.
أنت تعرف ماذا، تخلينا هذا السوبر ميزة مريحة من قوس مربع
التدوين، وأكثر بشكل صحيح المعروف الوصول العشوائي،
حيث أننا يمكن أن تقفز فقط إلى عنصر فردي
ولكن الآن إذا كان لا يزال المتطوعين وجودي هنا،
إذا أردت أن تجد عدد 22، لا أستطيع فقط
انتقال إلى قوس شيء شيء.
لدي للنظر أكثر من قائمة، والكثير مثل الأمثلة البحث لدينا خطيا،
للعثور على رقم 22.
لذلك يبدو أننا قد دفعت ثمنا هناك.
ولكننا لا نستطيع مع ذلك حل مشاكل أخرى.
>> في الواقع، اسمحوا لي أن أعرض بضع صور.
لذلك إذا كنت قد تم صولا الى ماثر في قاعة الطعام في الآونة الأخيرة،
تتذكرون أن من أكوام من الصواني مثل هذا،
نحن اقترضت من هذه أننبرغ قبل فئة.
لذلك هذا كومة من الأدراج، رغم ذلك، هو ممثل في الواقع
من بنية بيانات علوم الكمبيوتر.
هناك بنية البيانات في علم الحاسوب
يعرف كومة التي لطيف جدا يفسح المجال لهذا بالضبط بصرية.
حتى إذا كان كل من هذه الصواني ليس صينية لكن مثل عدد وكنت أرغب
لتخزين الأرقام، وأنا يمكن اخماد واحدة هنا،
ويمكن أن أضع آخر إلى هنا، وتواصل التراص أرقام
على رأس واحد آخر، وما هو يحتمل أن تكون مفيدة عن هذا
غير أن ما هو ضمنا هذا الهيكل البيانات؟
ما هو الرقم الذي يمكنني سحب أولا الأكثر مريح؟
ووضع واحد كان آخرها في هناك.
>> لذلك هذا هو ما نسميه في علوم الكمبيوتر بنية بيانات LIFO.
تستمر في، انتهت الأولى.
وسنرى قبل فترة طويلة لماذا قد يكون من المفيد لكنه الآن،
مجرد النظر في الممتلكات.
وانها نوع من الغباء إذا كنت تعتقد حول كيفية قاعة الطعام يفعل.
في كل مرة أنها نظيفة والصواني وضع الطازجة منها على القمة،
هل يمكن أن يكون نظيف سابقا ولكن في نهاية المطاف قذرة جدا والمتربة
صينية في أسفل جدا لو كنت أبدا في الواقع
الحصول على الجزء السفلي من ذلك المكدس، لأنك فقط
الحفاظ على وضع جديد و تلك نظيفة على أعلى من ذلك.
نفس الشيء قد يحدث في سوبر ماركت للغاية.
إذا كان لديك حالة العرض من الحليب، وفي كل مرة CVS
أو من يحصل على المزيد من الحليب، كنت مجرد يشق يحلب
لديك بالفعل في الظهر و كنت وضعت جديدة في خط الهجوم،
وأنت تسير في الحصول على بعض مقرفة جدا الحليب في نهاية بنية البيانات،
لأنه دائما في الجزء السفلي أو مكافئ انها دائما في الخلف.
>> ولكن هناك طريقة أخرى للتفكير يصطفون البيانات وعلى سبيل المثال، هذا.
إذا كنت واحدا من هؤلاء الناس الذي يحب ليصطف خارج متاجر أبل
عندما منتج جديد يأتي من، وربما كنت
لا تستخدم البيانات كومة هيكل لأنك
سوف ينفر الجميع من هو يصطفون لشراء بعض لعبة جديدة.
بدلا من ذلك، وربما كنت تستخدم أي نوع من هياكل البيانات
أو ما هو نوع النظام في العالم الحقيقي؟
نأمل انها خط أو أكثر صحيح أو أكثر بريطانيا مثل طابور.
واتضح طابور أيضا هيكل البيانات في علوم الكمبيوتر،
ولكن طابور لديه جدا خاصية مختلفة.
انها ليست LIFO.
تستمر في، انتهت الأولى.
لا سمح الله.
انها بدلا FIFO.
أولا في، انتهت الأولى.
وهذا شيء جيد للإنصاف 'ساكي
بالتأكيد عندما كنت بطانة حتى فائقة في الصباح الباكر.
إذا لم تحصل هناك أولا، كنت نريد أن نخرج أولا أيضا.
>> وهكذا كل هذه البيانات الهياكل، والطوابير ومداخن
وباقات الآخرين، تبين لك يمكن التفكير في هذا الأمر فقط صفيف.
هذا هو صفيف، ربما حجم الثابتة 4، ولكن يهمني
أن يكون نوع من لطيفة لو استطعنا كومة فقط صواني تقريبا طويل القامة بلا حدود إذا كنا
لدينا أن العديد من الأدراج أو الأرقام.
ربما لذلك نحن نريد أن استخدام قائمة مرتبطة هنا،
ولكن المفاضلة ستكون يحتمل أن نحتاج إلى المزيد من الذاكرة،
يأخذ المزيد من الوقت، لكننا لا تحد من ارتفاع المدخنة،
مثل الكثير من عرض القضية ماثر في قد تحد من حجم المكدس،
وهكذا وهذه هي قرارات التصميم أو الخيارات المتاحة لنا في نهاية المطاف.
حتى مع هذه البيانات الهياكل، لقد بدأ
رؤية الحدود العليا الجديدة المحتملة على ما كان في السابق بسرعة فائقة
وحيث أننا سنترك من اليوم وأين
سنقوم نأمل في الحصول على ل هو يوم الأربعاء، وسوف نقوم
بدء النظر في البيانات الهيكل الذي يتيح لنا بحث
من خلال البيانات في وقت النهاية سجل مرة أخرى.
ورأينا أن أذكر، في الأسبوع الصفر واحدة مع البحث الثنائي أو الانقسام
وقهر.
انها قادمة الظهر والأفضل من ذلك، الكأس المقدسة لهذا الأربعاء
سيكون لتأتي مع هيكل البيانات التي تدير حقا
أو نظريا في وقت ثابت، حيث
لا يهم كم عدد ملايين أو بلايين الأشياء
لدينا في بنية البيانات، وسوف تأخذنا وقت ثابت، ربما خطوة واحدة
أو خطوتين أو 10 خطوات، لكن الأرقام ثابتة من الخطوات
للبحث عن طريق هذا الهيكل البيانات.
أن الواقع سيكون الكأس المقدسة ولكن أكثر على ذلك يوم الاربعاء.
يا ترى بعد ذلك.
>> [عزف الموسيقى]