1. At a computer system including system memory, a method for optimizing the execution of a software procedure, the method comprising: an act of accessing an executable procedure that includes a plurality of different code blocks, the executable procedure having a starting code block and one or more conditional statements that separate execution of the procedure into other code blocks; an act of accessing block count data for the executable procedure, the block count data including a block count for each code block, each block count indicating how many times a code block was executed during one or more prior executions of the executable procedure; an act of creating one or more code block chains of one or more code blocks for the executable procedure based on the accessed block count data, creating the one more code block chains including splitting any zero count code blocks into separate zero count chains; and an act of ordering the one or more code block chains based on precedence relationships for placement in system memory to optimize subsequent execution of the executable procedure, including: an act of creating an ordering for any non-zero count code block chains including connecting any non-zero count code block chains to one another in accordance with precedence relationships; an act of creating an ordering for any zero count code block chains including connecting any zero count code block chains to one another in accordance with precedence relationships; an act of subsequently appending the ordering of zero count code block chains to the end of the ordering of non-zero count code block chains to create a total ordering for the one or more code block chains such that any non-zero count blocks are placed before all zero count blocks within system memory when the total ordering is placed into system memory.