Một lưu ý là ở video chỉ liệt kê các các phần cơ bản của một stack frame để các bạn dễ nắm bắt thôi nhé. Một stack frame đầy đủ còn có exception handler, saved registers... Và một câu hỏi phụ dành cho các Code Kỹ: truy cập biến trong stack và trong heap cái nào sẽ nhanh hơn?
@minhquannguyen36054 жыл бұрын
Theo mình hiểu là stack sẽ nhanh hơn. Con trỏ chương trình thường sẽ trỏ lên stack (trong việc xử lý các vấn đề scope). Trên heap thì sẽ phải tốn qua 1 bước qua pointer, ngoài ra code trên heap cũng ko đc đưa vào cache, register trong quá trình optimize, trong khi stack thì có thể
@namdophuong260910 ай бұрын
Anh ơi, cho em hỏi là trong ngôn ngữ lập trình C thì thực sự sẽ có mấy kiểu cấp phát bộ nhớ ạ ? Em có tham khảo trên một số trang web thì nói có hai cách cấp phát đó là static memory allocation và dynamic memory allocation. Nhưng có một số nơi còn có thêm cả automatic memory allocation nữa ạ. Mong anh giải đáp thắc mắc giúp em ạ. E cảm ơn !
@longvungoc2606 ай бұрын
hay quá ạ, anh có thể ra thêm video về compiler và cách compiler hoạt động không ạ
@MrThinhle3 жыл бұрын
Cảm ơn anh nhé, rất dễ hiểu ạ
@KienNguyenTT6 ай бұрын
anh hướng dẫn lập trình assembly đi ạ
@lennguyenphuoc8164 Жыл бұрын
Học môn nào thì có thể biết được các kiến thức về phần này vậy ad
@LongHoang-xl7vj Жыл бұрын
Hợp ngữ - Assembly nha bạn
@minhcuongtran85044 жыл бұрын
ôi đỉnh , a ra video thêm về mcu đi a , những cái cần để đi thực tập ạ
@codeky22614 жыл бұрын
Ok nhé ;)
@parkle_2 жыл бұрын
cảm ơn anh rất nhiều
@haoanh6552 жыл бұрын
cho e hỏi toàn bộ memory layout nằm trên RAM phải k ạ?
@ducduong6328 Жыл бұрын
chuan, memory dich ra la ram ma
@baotang643610 ай бұрын
@@ducduong6328vậy rom chứa gì bạn
@NgPhucAn6 ай бұрын
@@ducduong6328không có kiến thức thì đừng có dạy người ta. RAM là random access memory, còn memory là bộ nhớ.
@ducduong63286 ай бұрын
@@NgPhucAn ram la thang cha may ay
@NgPhucAn6 ай бұрын
@@ducduong6328 kkk cmt 1 năm rồi mà vẫn cay à =))
@mykun87372 жыл бұрын
đoạn push() hàm foo vào stack bạn vẽ nhầm, vì khi đó hàm foo phải ở bên trên stack mới đúng
@chungtrinhuc49362 жыл бұрын
Bạn nhầm rồi, cái stack đầu nó ở dưới đáy nó ở trên theo như hình minh họa nên như thế là đúng r
@ph2in1 Жыл бұрын
bạn làm về memory pool region nhé.
@viennguyenquoc79203 жыл бұрын
ad có thể giải thích rõ hơn về Stack Frame dc không ạ
@PiPuisme Жыл бұрын
Dạ cho em hỏi khi mình tạo một con trỏ thì con trỏ đó sẽ được lưu ở stack còn data tại địa chỉ con trỏ trỏ đến được cấp phát sẽ được lưu trong heap, như vậy có đúng không ạ? Em cám ơn.
@codeky2261 Жыл бұрын
Data chỉ được lưu trong heap nếu đc cấp phát động, như là bằng malloc hoăc new. Khi cấp phát động thì sẽ trả về con trỏ để quản lý vùng nhớ đó.
@mandaraanda25974 жыл бұрын
Cho em hỏi là em sv năm 4 rồi muốn hướng sang Embedded (cụ thể là lập trình ECU xe máy) thì lập trình hướng đối tượng có nên học ko ạ hay mình chỉ cần tập trung vào vi điều khiển ạ?
@codeky22614 жыл бұрын
Hi em, Lập trình embedded cho ECU chủ yếu vẫn dùng C và thường thì không lập trình theo OOP. Theo định hướng nhúng cho ECU thì trước tiên em nên tập trung vào C, kiến trúc vi điều khiển, các ngoại vi và các chuẩn giao tiếp bus (trong automotive thì LIN, CAN, Flexray...). Sau khi đã vững với C và embedded, em có thể học thêm OOP để mở rộng lĩnh vực của mình. Em cũng có thể áp dụng một số khái niệm của object (không phải full OOP) vào lập trình C cho embedded để có kiến trúc chương trình tốt hơn. Chúc em thành công với định hướng của bản thân nhé :)
@mandaraanda25974 жыл бұрын
@@codeky2261 dạ, em chân thành cảm ơn góp ý của anh. Và nếu giờ em muốn học thêm về automotive thì em nên học ở đâu ạ (em ở sài gòn). Mong chờ nhiều nhiều video của anh để em có thể học hỏi và sẻ chia cho nhiều bạn khác hơn ạ. Chúc anh 1 ngày 20.11 thật nhiều niềm an vui.
@codeky22614 жыл бұрын
Cảm ơn em. Anh cũng không biết trung tâm nào dạy về automotive tốt ở Saigon. Sắp tới nhóm sẽ thêm các video về automotive. Em tiếp tục ủng hộ nhóm nhé. :)
@mandaraanda25974 жыл бұрын
@@codeky2261 Dạ, em để sub alarm lun òi :v có video là em ủng hộ liền liền luonn
@phuco82063 жыл бұрын
Hi bạn, nếu bạn muốn theo hướng automative thì có thể apply vào FPT nhé, bên đấy có tuyển fresher nha. Chỉ cần bạn có kiến thức về C và vi điều khiển là được.
@quanphamanh9573 жыл бұрын
Anh ơi cho em hỏi là sao ví dụ về stack thì function foo lại ném ở dưới function main mà không phải bỏ từ trên xuống ạ
@atNguyen-gm6cf3 жыл бұрын
cùng câu hỏi
@Huynh-Tan-Quoc3 жыл бұрын
Mình code thì có thể code được, vì cũng làm một vài project rồi. Mà hiện mình chưa tự tin ứng cử vào vị trí lập trình nhúng. Vậy có lời khuyên nào cho mình? Do mình thích code nhúng.
@codeky22613 жыл бұрын
Mình có thể tự làm một số project về nhúng, vừa để nâng skill, vừa để có cái show kinh nghiệm. Code thì up lên github, demo quay video lại và up lên youtube. CV thì liệt kê các project đó và dẫn link đến code+demo. Ý tưởng về project thì có thể tìm trên mạng. :)
@Huynh-Tan-Quoc3 жыл бұрын
@@codeky2261 Mình đã từng làm một số project, nhưng vẫn chauw tự tin PV, do mình cũng đã hơn 32 rồi. Mình chưa hiểu lắm các thuật ngữ trong code, với cũng ít dùng, mặc dù có làm một vài cái như smart Locker, Thiết bị thước đo lường...
@hoantran35413 жыл бұрын
@@Huynh-Tan-Quoc Tầm tuổi đấy mà chưa tự tin với kiến thức thì... Trẻ họ còn chỉ bảo, chứ lớn phải nỗ lực để mức kinh nghiệm nó tương đương với tuổi. Sự thực nó vậy. Không biết hỏi vậy để làm gì
@Huynh-Tan-Quoc3 жыл бұрын
@@hoantran3541 Thật ra khi đi làm, mình điều biết giữa làm được, làm chạy ổn định, làm tối ưu là các cấp bậc level nó khác nhau. Mình code này cũng được 2 năm, nhưng với các project nó bé tí, tính cọ xác ko cao. Với chưa vòa môi trường chuyên nghiệp, trước giờ mình toàn tự mò tới mò, chưa qua trường lớp nào về lập trình cả. Kiểu dân trong đạo hay nói mình là dân ngoại đạo vậy ý. Nhiều lúc code được, nhưng ko hiểu nó thuật ngữ chuyên môn gì. Với mình code trên nền có sẵn thư viện rồi, mình kế thừa thư viện ý vào ứng dụng của mình. cho nên nhiều lúc ứng dụng mình ko quá phức tạp, nên kiến thức nó cũng hạn hẸp. mình chuyên về QL hệ thống, nhưng giờ muốn đổi qua chuyên môn này ý.
@minhcuongtran85043 жыл бұрын
cho em hỏi bộ nhớ flash có thể ở trong vùng text đúng k ạ . và stack có được tạo ra bởi vùng nhớ flash k ạ
@codeky22613 жыл бұрын
Vùng text chứa code nên trong bare application thường là dùng flash luôn. Với OS-based application thì os sẽ load chương trình vào ram cho nên text segment sẽ nằm ở RAM. Về stack, và cả heap, thì mình sẽ dùng RAM vì đặc thù các vùng này liên tục cấp phát và giải phóng bộ nhớ, nghĩa là đọc ghi liên tục. Nếu dùng flash thì sẽ rất chậm, chưa kể flash ngày xưa có write cycle khá ít :)
@minhcuongtran85043 жыл бұрын
Vâng em cảm ơn . A ra thêm video đi ạ
@abisut4 жыл бұрын
Mình không biết có đúng hay là không, nhưng có vẻ đây là memory layout của 1 process(trên linux chẳn hạn) mà C program là một trong những process như vậy nên nó có memory layout như bạn trình bày. Bạn có thử làm với C trên window chưa? cái memory layout có giống vậy không? Mình nghĩ đây thật sự có liên quan mật thiết đến platform chứ không chính xác là với mọi C program trên mọi platform là nó như vậy. Trên window nó khác, trên linux nó khác, và có vẻ trên Mac cũng khác luôn.
@codeky22614 жыл бұрын
Thanks, câu hỏi của bạn rất hay và gợi mở được nhiều vấn đề mới không có trong video. Memory layout của một process trên linux cũng tương tự như vậy, nhưng không phải vì vậy mà một chương trình C có cấu trúc như đó. Thực ra là Linux kernel được viết bằng C. Các segment như Text, DS và BSS là các concept trong computer science chứ không phải thuộc về Linux. Từ kiến trúc của chip 8086 đã support các Code segment, Data segment, Stack segment… Các ngôn ngữ hiện đại hơn sau này apply và phát triển các concept này. Khi compiler compile code C ra một chương trình thực thi thì đã bao gồm Text, DS và BSS rồi. Nếu chương trình được build và chạy trên môi trường OS như Linux hoặc Window thì OS sẽ tạo virtual address space cho process và load chương trình vào mem. Heap và Stack được allocate bởi OS. Chú ý là trong hình visualize các segment này liền kề nhau nhưng thực tế không cần như vậy. Allocate như thế nào là do OS quyết định. Nếu build chương trình bare-metal (non-os) cho các ứng dụng embedded, chúng ta cần define các segment này trong linker script và viết thêm startup code (thường là dùng assembly) Thân :)
@toancong23274 жыл бұрын
@@codeky2261 cảm ơn bạn đã cho mình biết thêm kiến thức hữu ích này. ESP, EFP thực sự rất hữu ích trong quá trình trace back. Anyway, kênh này cũng là 1 trang khá hay để hiểu hơn về virtual memory: cpp.daynhauhoc.com/8/10-phan-loai-cac-vung-nho-stack-va-heap/ Thank !!!
@codeky22614 жыл бұрын
Thanks bạn. Link bạn gửi rất hữu ích.
@_USER_NAME_4 жыл бұрын
hay quá A
@codeky22614 жыл бұрын
Thanks bạn đã ủng hộ kênh nhé
@ngoctranss Жыл бұрын
Anh ơi cho em xin slide được không ạ
@duongvumanh5651 Жыл бұрын
cho em hỏi tại sao stack lại cấp từ địa chỉ cao đến thấp với ạ
@codeky2261 Жыл бұрын
Cái này do OS hoặc compiler quy định. Tùy theo OS hoặc compiler mà sắp xếp stack từ đc cao xuống thấp hoặc thấp lên cao thôi.
@hoc-lap-trinh4 ай бұрын
@@codeky2261do kiến trúc máy tính quy định đó bạn, OS hay compiler chỉ giúp phân bố phần bộ nhớ làm stack thôi, các lệnh push luôn làm giảm giá trị của stack pointer (SP), pop thì ngược lại
@nghialuu22033 жыл бұрын
Những cái này thì đọc sách nào nhỉ ?
@levantho72644 жыл бұрын
Thanks anh.
@codeky22614 жыл бұрын
Thanks em đã ủng hộ kênh nhé
@levantho72644 жыл бұрын
@@codeky2261 mong anh ra nhiều video ....anh có chuyên về MCU không ạ? em muốn học hỏi thêm....
@codeky22614 жыл бұрын
Sắp tới sẽ làm video về embedded nhé :)
@hoangbachdang90752 жыл бұрын
local variable em không thấy anh đề cập
@ducduong6328 Жыл бұрын
Stack segment Call Stack (thường được gọi là Stack) được dùng để cấp phát bộ nhớ cho tham số của các hàm (function parameters) và biến cục bộ (local variables). Call Stack được thực hiện theo cấu trúc dữ liệu stack, do đó, trước khi nói về phân vùng Stack trên bộ nhớ ảo mình sẽ trình bày cho các bạn về cấu trúc dữ liệu stack trước.