[video member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Saving and Restoring Dynamically Allocated Memory Pages" vod_platform=youtube id=MSDl5-akNLE annotator=Miblo] [0:03][Recap and set the stage for the day] [4:07][Run the game to demo the current situation with regards to the looped live code editing] [6:11][win32_handmade.h: Introduce a win32_memory_block struct and add a MemorySentinel to win32_state to enable us to iterate over the memory blocks] [10:07][win32_handmade.cpp: Enable PLATFORM_ALLOCATE_MEMORY() and PLATFORM_DEALLOCATE_MEMORY() to handle multiple linked memory blocks] [21:20][Note a caveat: This linked list is not thread-safe] [22:50][win32_handmade.cpp: Make PLATFORM_ALLOCATE_MEMORY() thread-safe] [25:34][win32_handmade.cpp: Think through how to enable Win32BeginRecordingInput() and Win32BeginInputPlayBack() to handle multiple memory blocks] [30:11][win32_handmade.cpp: Get rid of MapViewOfFile() and Win32GetReplayBuffer() and other cruft] [35:48][win32_handmade.h: Introduce win32_saved_memory_block struct and enable Win32BeginInputPlayBack() to play from blocks of that type] [41:05][win32_handmade.cpp: Enable Win32BeginRecordingInput() and Win32EndRecordingInput() to handle multiple blocks] [47:03][Reflect on what we've done, run the game, crash in a Win32DeallocateMemory() call and investigate why] [51:19][Reproduce the bug and investigate what's happening] [53:23][win32_handmade.cpp: Make the linked list in PLATFORM_ALLOCATE_MEMORY() thread-safe] [54:22][Run the game and try in vain to reproduce the bug, before describing what was happening] [55:09][Run the game again and crash in inside KernelBase.dll in Win32BeginInputPlayBack()] [56:25][win32_handmade.cpp: Make Win32BeginInputPlayBack() pass &BytesRead to ReadFile()] [57:31][Run the game and find that that fixed it] [58:55][win32_handmade.cpp: Make Win32BeginRecordingInput() pass &BytesWritten to WriteFile()] [59:23][Run the game and determine that we're not quite reloading correctly] [59:59][Q&A] [1:00:51][@soysaucethekid][Could you explain the padding you used for the memory struct? I believe you said it was for cache-line stuff, so if you omitted it, would it just result in more cache line misses or would it crash the game?] [1:03:15][@fangk20][How did you get to where you are today and how did you do it, in terms of coding knowledge?[ref site="Molly Rocket" page="Meet the Team: Casey Muratori" url="https://mollyrocket.com/news_0003.html"]] [1:04:04][@torgdor][It's a bit early to ask, but will there be a HandmadeCon 2017?] [1:06:28][@jeemjam420][Would you recommend any specific resource for learning C++? So far I've been using the "learncpp" website] [1:06:45][@zilarrezko][Have you ever used a rope to manipulate strings?] [1:08:31][@randolfbat][Aren't you going to read in pages that have been deallocated?] [1:11:51][@snoringtortoise][So with memory systems, do you always try to put extra bits of data at the end to ensure if they ask for memory from a specific address then it doesn't ruin their day?] [1:13:22][Close it down with a glimpse into the future] [/video]