@@ -716,151 +716,3 @@ function whos(io::IO=STDOUT, m::Module=current_module(), pattern::Regex=r"")
716716end
717717whos (m:: Module , pat:: Regex = r" " ) = whos (STDOUT, m, pat)
718718whos (pat:: Regex ) = whos (STDOUT, current_module (), pat)
719-
720- # ################################################################################
721-
722- """
723- Base.summarysize(obj; exclude=Union{Module,DataType,TypeName}) -> Int
724-
725- Compute the amount of memory used by all unique objects reachable from the argument.
726- Keyword argument `exclude` specifies a type of objects to exclude from the traversal.
727- """
728- summarysize (obj; exclude = Union{Module,DataType,TypeName}) =
729- summarysize (obj, ObjectIdDict (), exclude)
730-
731- summarysize (obj:: Symbol , seen, excl) = 0
732-
733- function summarysize (obj:: UnionAll , seen, excl)
734- return 2 * sizeof (Int) + summarysize (obj. body, seen, excl) + summarysize (obj. var, seen, excl)
735- end
736-
737- function summarysize (obj:: DataType , seen, excl)
738- key = pointer_from_objref (obj)
739- haskey (seen, key) ? (return 0 ) : (seen[key] = true )
740- size = 7 * sizeof (Int) + 6 * sizeof (Int32) + 4 * nfields (obj) + ifelse (Sys. WORD_SIZE == 64 , 4 , 0 )
741- size += summarysize (obj. parameters, seen, excl):: Int
742- size += summarysize (obj. types, seen, excl):: Int
743- return size
744- end
745-
746- function summarysize (obj:: TypeName , seen, excl)
747- key = pointer_from_objref (obj)
748- haskey (seen, key) ? (return 0 ) : (seen[key] = true )
749- return Core. sizeof (obj) + (isdefined (obj,:mt ) ? summarysize (obj. mt, seen, excl) : 0 )
750- end
751-
752- summarysize (obj:: ANY , seen, excl) = _summarysize (obj, seen, excl)
753- # define the general case separately to make sure it is not specialized for every type
754- function _summarysize (obj:: ANY , seen, excl)
755- key = pointer_from_objref (obj)
756- haskey (seen, key) ? (return 0 ) : (seen[key] = true )
757- size = Core. sizeof (obj)
758- ft = typeof (obj). types
759- for i in 1 : nfields (obj)
760- if ! isbits (ft[i]) && isdefined (obj,i)
761- val = getfield (obj, i)
762- if ! isa (val,excl)
763- size += summarysize (val, seen, excl):: Int
764- end
765- end
766- end
767- return size
768- end
769-
770- function summarysize (obj:: Array , seen, excl)
771- haskey (seen, obj) ? (return 0 ) : (seen[obj] = true )
772- size = Core. sizeof (obj)
773- # TODO : add size of jl_array_t
774- if ! isbits (eltype (obj))
775- for i in 1 : length (obj)
776- if ccall (:jl_array_isassigned , Cint, (Any, UInt), obj, i- 1 ) == 1
777- val = obj[i]
778- if ! isa (val, excl)
779- size += summarysize (val, seen, excl):: Int
780- end
781- end
782- end
783- end
784- return size
785- end
786-
787- summarysize (s:: String , seen, excl) = sizeof (Int) + sizeof (s)
788-
789- function summarysize (obj:: SimpleVector , seen, excl)
790- key = pointer_from_objref (obj)
791- haskey (seen, key) ? (return 0 ) : (seen[key] = true )
792- size = Core. sizeof (obj)
793- for i in 1 : length (obj)
794- if isassigned (obj, i)
795- val = obj[i]
796- if ! isa (val, excl)
797- size += summarysize (val, seen, excl):: Int
798- end
799- end
800- end
801- return size
802- end
803-
804- function summarysize (obj:: Module , seen, excl)
805- haskey (seen, obj) ? (return 0 ) : (seen[obj] = true )
806- size:: Int = Core. sizeof (obj)
807- for binding in names (obj, true )
808- if isdefined (obj, binding) && ! isdeprecated (obj, binding)
809- value = getfield (obj, binding)
810- if ! isa (value, Module) || module_parent (value) === obj
811- size += summarysize (value, seen, excl):: Int
812- vt = isa (value,DataType) ? value : typeof (value)
813- if vt. name. module === obj
814- if vt != = value
815- size += summarysize (vt, seen, excl):: Int
816- end
817- # charge a TypeName to its module
818- size += summarysize (vt. name, seen, excl):: Int
819- end
820- end
821- end
822- end
823- return size
824- end
825-
826- function summarysize (obj:: Task , seen, excl)
827- haskey (seen, obj) ? (return 0 ) : (seen[obj] = true )
828- size:: Int = Core. sizeof (obj)
829- if isdefined (obj, :code )
830- size += summarysize (obj. code, seen, excl):: Int
831- end
832- size += summarysize (obj. storage, seen, excl):: Int
833- size += summarysize (obj. backtrace, seen, excl):: Int
834- size += summarysize (obj. donenotify, seen, excl):: Int
835- size += summarysize (obj. exception, seen, excl):: Int
836- size += summarysize (obj. result, seen, excl):: Int
837- # TODO : add stack size, and possibly traverse stack roots
838- return size
839- end
840-
841- function summarysize (obj:: MethodTable , seen, excl)
842- haskey (seen, obj) ? (return 0 ) : (seen[obj] = true )
843- size:: Int = Core. sizeof (obj)
844- size += summarysize (obj. defs, seen, excl):: Int
845- size += summarysize (obj. cache, seen, excl):: Int
846- if isdefined (obj, :kwsorter )
847- size += summarysize (obj. kwsorter, seen, excl):: Int
848- end
849- return size
850- end
851-
852- function summarysize (m:: TypeMapEntry , seen, excl)
853- size:: Int = 0
854- while true # specialized to prevent stack overflow while following this linked list
855- haskey (seen, m) ? (return size) : (seen[m] = true )
856- size += Core. sizeof (m)
857- if isdefined (m, :func )
858- size += summarysize (m. func, seen, excl):: Int
859- end
860- size += summarysize (m. sig, seen, excl):: Int
861- size += summarysize (m. tvars, seen, excl):: Int
862- m. next === nothing && break
863- m = m. next:: TypeMapEntry
864- end
865- return size
866- end
0 commit comments