# EPF Dev Update 3 1. Started studying C# Memory management, specifically focusing on the garbage collector, which includes gen0, gen1, and gen2/LOH for large objects. Seeking knowledge on the influence of object lifetimes, configuration options, and memory allocation patterns or rates on its behavior. In addition, I am also developing a strategy to enhance my proficiency in the language within a moderate timeframe. 2. Did a tutorial on perfview 3. In winDbg learnt how to search for loaded modules, put a breakpoint at Common Language Runtime (CLR) module, dump the heap and stack. 4. Spent more time reading the IL-EVM code, I think I have good gist of it, just a few remaining questions about it. 5. Thought more deeply about the issues, had questions about how the code patterns that are frequently called on the chain be discovered so that they can be optimized? Maybe as a modified client running a sequential pattern mining algorithm (GSP, SPADE etc) or run data analysis on indexed data outside the client? 6. Exploring sequential pattern mining algorithms 7. Started learning about how solidity code is represented in EVM code (memory layout etc) and the differences between the new and old compiler i.e. Code offsets as function pointers in old vs a dispatch function internally using switch to select the function in new. 8. Setup an Ubuntu VM to build the solidity compiler, there are sections in it worth studying that might have direct impact on optimization e.g. the GasEstimation / Gas Meter code might help with the issue on amortizing gas cost. 9. Refreshing and taking a deeper dive into some CompSci topics on computer systems, did exercises by hand on the following topics: - **Low level Information representation**: - Conversions between Hex, Binary, and decimals - Word Sizes - Addressing and Byte Ordering (Big and Little endian) - Boolean Algebra, Shift Operations - Integer Representation: BinaryToUnsigned, BinaryToTwo's-compliment, Two's-ComplementToUnsigned - **Machine Code**: - Looked at how simple C programs and then even C# programs are represented in assembly, and the differences between the representations on a Windows machine (Intel representation) vs. a Linux one (AT&T representation) - Data types and Assembly code suffix - Operand Specifiers that represent sources or destinations of information, i.e., differences between `$Immediate`, `%register`, `(%register)`, `(%register1, %register2)`, `(%register1, %register2)`, `$(, %register1, %register2)`, `$Imm(%reg,%reg2, scale)` etc.