{"id":184604,"date":"2010-01-05T00:00:00","date_gmt":"2010-01-11T23:01:08","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/research\/msr-research-item\/modeling-the-heap-a-practical-approach\/"},"modified":"2016-08-22T11:27:39","modified_gmt":"2016-08-22T18:27:39","slug":"modeling-the-heap-a-practical-approach","status":"publish","type":"msr-video","link":"https:\/\/www.microsoft.com\/en-us\/research\/video\/modeling-the-heap-a-practical-approach\/","title":{"rendered":"Modeling The Heap: A Practical Approach"},"content":{"rendered":"<div class=\"asset-content\">\n<p>At the heart of most software engineering and optimization applications is some<br \/>\nmodel of runtime program behavior. The widespread adoption of object-oriented<br \/>\nprogramming and memory managed languages has lead to programs that make<br \/>\nextensive use of rich pointer structures and that use data as a central part of<br \/>\norganizing the program structure. Thus, understanding the memory state of the<br \/>\nprogram is an increasingly critical part of understanding the behavior of the<br \/>\nprogram. The increasing difficulty (and importance) of understanding the<br \/>\nbehavior of a program is occurring at the same time as increasing program<br \/>\ncomplexity, the growing need for these programs to take advantage of parallel<br \/>\nhardware (plus complex memory hierarchies), and the decreasing tolerance for<br \/>\nsoftware defects. <\/p>\n<p>This talk will introduce a model we have developed for representing the program<br \/>\nheap and the classes of information that can be represented with this model<br \/>\n(shape, regions, heap use\/mod, reachabliltiy, collection\/iterator state,<br \/>\nsharing, nullity, and escape information). Using this model we will briefly<br \/>\ndemonstrate how it can be used for static analysis and debugger support. The<br \/>\nstatic analysis is currently able to handle the majority of the managed .net<br \/>\nbytecode and can analyze programs up to 15KLoc in a few minutes and a ~200MB of<br \/>\nmemory (which is exceptionally fast for shape analysis techniques). These<br \/>\nresults can the be used directly to aid program understanding, for generating<br \/>\nrich type signatures, in optimization applications, or as the basis for other<br \/>\nanalysis tools. I will also demonstrate how the model can be used in dynamic<br \/>\napplications, such as a debugger where we use the model to produce compact<br \/>\nvisualizations of the heap to aid the programmer in understanding the program<br \/>\nstate.<\/p>\n<\/div>\n<p><!-- .asset-content --><\/p>\n","protected":false},"excerpt":{"rendered":"<p>At the heart of most software engineering and optimization applications is some model of runtime program behavior. The widespread adoption of object-oriented programming and memory managed languages has lead to programs that make extensive use of rich pointer structures and that use data as a central part of organizing the program structure. Thus, understanding the [&hellip;]<\/p>\n","protected":false},"featured_media":195505,"template":"","meta":{"msr-url-field":"","msr-podcast-episode":"","msrModifiedDate":"","msrModifiedDateEnabled":false,"ep_exclude_from_search":false,"_classifai_error":"","msr_hide_image_in_river":0,"footnotes":""},"research-area":[],"msr-video-type":[],"msr-locale":[268875],"msr-post-option":[],"msr-session-type":[],"msr-impact-theme":[],"msr-pillar":[],"msr-episode":[],"msr-research-theme":[],"class_list":["post-184604","msr-video","type-msr-video","status-publish","has-post-thumbnail","hentry","msr-locale-en_us"],"msr_download_urls":"","msr_external_url":"https:\/\/youtu.be\/AbiVYHVU0mQ","msr_secondary_video_url":"","msr_video_file":"","_links":{"self":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video\/184604","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video"}],"about":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/types\/msr-video"}],"version-history":[{"count":0,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video\/184604\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media\/195505"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/media?parent=184604"}],"wp:term":[{"taxonomy":"msr-research-area","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/research-area?post=184604"},{"taxonomy":"msr-video-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-video-type?post=184604"},{"taxonomy":"msr-locale","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-locale?post=184604"},{"taxonomy":"msr-post-option","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-post-option?post=184604"},{"taxonomy":"msr-session-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-session-type?post=184604"},{"taxonomy":"msr-impact-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-impact-theme?post=184604"},{"taxonomy":"msr-pillar","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-pillar?post=184604"},{"taxonomy":"msr-episode","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-episode?post=184604"},{"taxonomy":"msr-research-theme","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/research\/wp-json\/wp\/v2\/msr-research-theme?post=184604"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}