当前位置:  开发笔记 > 开发工具 > 正文

你如何制作内存和数据结构图?

如何解决《你如何制作内存和数据结构图?》经验,为你挑选了3个好方法。

我必须在C中创建一个操作字符串的短程序,但我总是遇到一些奇怪的指针错误.虽然K&R是语言的一个很好的参考,当我感到困惑时,我经常会看到它已经假定你是一个适当的程序员.

教我们编程的讲师说好的程序员在这些东西上做了很好的图表,但我不知道怎么做.你能推荐一本好书或讲座吗?

谢谢,我会感谢我得到的每一个答案.



1> Remo.D..:

我首先回应了在纸上绘制它们的建议然后,如果您觉得有必要,可以在代码中包含它们的ascii版本.

我通常使用这三种格式:


推理记忆:


      +--------+
   0  |        |  <- start
      +--------+
   1  |        |  <- q  scans from start to end
      +--------+
      ~  ..... ~
      +--------+
      |        |  <- end
      +--------+  \
      |        |  |
      +--------+  |__ rest of the
      ~  ..... ~  |   allocated memory
  n   |        |  |
      +--------+ /


推理字符串:


    0               n
   +--+-- --+--+--+--+
   |  | ... |  |  |\0|
   +--+-  --+--+--+--+
     ^        ^__ q moves from the
     |            end to the start
     p moves from
       start to the end


推理单词中的位:


   xxxx yyzz 00tt 11ss
   \    \ \  \ \  \ \__ storage registry
    \    \ \  \ \  \___ always set to 1
     \    \ \  \ \_____ temp value
      \    \ \  \______ always zeroed 
       \    \ \________ zero flag value
        \    \_________ y register
         \_____________ x address            

我过去常常为有限状态机做类似的事情但是它们往往过于复杂(而且耗时很长)所以我现在直接将graphviz代码嵌入到注释中.即使不了解GraphViz,也应该很容易猜到如何绘制FSM图.

digraph G {
  mode = hier

  LIMBO [style= filled];
    node [shape = ellipse];

    LIMBO   -> HEADER  ;
    HEADER  -> LIMBO;
    HEADER  -> TUNE ;
    TUNE    -> LYRICS ;
    TUNE    -> CHORD [style=dashed ];
    TUNE    -> LIMBO ;
    GRACE   -> TUNE ;
    GRACE   -> CHORD  [style=dashed ] ;
    SYMBOLS -> TUNE ;
    SYMBOLS -> LIMBO ;

    overlap=false
  sep = 1.5
}


这些涵盖了我需要的绝大多数图表.对于更复杂的,我使用GraphViz或OpenOffice Draw.



2> froh42..:

我曾经做过的最有用的事情之一是我的应用程序绘制图表...

在具有专门针对作业的复杂数据结构的应用程序中(标准散列表在那种情况下没有;-)我的应用程序输出了一个".dot"脚本,graphviz的点工具可以解析.

它通过使用转储例程(好的,方法,它是C++)来输出.dot标头

 digraph g {

然后走了我的数据结构,然后写了页脚

 }

在结构walk中,它用每个指针编写

 SOURCE -> DESTINATION

其中Source是使用O(O213435354)预先填充的引用对象的内存地址,而Destination是以相同格式指向的对象.

在每个对象的开头它也写了

SOURCE [ .... ]  

与...作为对象数据.

每当应用程序处于"有趣"状态时,我都会转储图形,然后使用graphviz中的点工具对其进行可视化.我很容易发现很多指针错误,眼睛是为了看到线条中的常规结构......

顺便说一句,我仍然可以正常使用graphviz,因为使用文本编辑器编写和编辑图表非常好,然后让工具对它们进行视觉化.如果我需要为一个受到电影浪潮破坏的观众打扮.dot图表,我将它们加载到Mac上的OmniGraffle中.(而且我的PC使用同事认为我有一些图表超级英雄的权力,因为使用这种组合我生成的图表比他们使用Visio时快10倍)



3> 小智..:

优秀的程序员不会制作"漂亮"的图表 - 他们会制作满足其目的的邋,难以辨认的图表.只需在任何可用的表面上涂抹您需要的东西.而且对于绘制"正确"的形状并不感兴趣 - 我的前同事曾经说过,如果你不能在fag的背面绘制图表,那么图表方法就不值得了.英国人)包.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有