comparison src/alloc.c @ 12748:3433bb446e06

(cons_cells_consed, floats_consed, vector_cells_consed) (symbols_consed, string_chars_consed, misc_objects_consed) (intervals_consed): New vars. (make_float, Fcons, make_interval, allocate_vectorlike, Fmake_symbol) (allocate_misc, make_uninit_string): Increment them. (Fmemory_use_counts): New function. (syms_of_alloc): defsubr it.
author Richard M. Stallman <rms@gnu.org>
date Wed, 02 Aug 1995 18:30:53 +0000
parents c5798bb57fdd
children f042ef632b22
comparison
equal deleted inserted replaced
12747:a36d5f3940b5 12748:3433bb446e06
69 static __malloc_size_t bytes_used_when_full; 69 static __malloc_size_t bytes_used_when_full;
70 70
71 /* Number of bytes of consing done since the last gc */ 71 /* Number of bytes of consing done since the last gc */
72 int consing_since_gc; 72 int consing_since_gc;
73 73
74 /* Count the amount of consing of various sorts of space. */
75 int cons_cells_consed;
76 int floats_consed;
77 int vector_cells_consed;
78 int symbols_consed;
79 int string_chars_consed;
80 int misc_objects_consed;
81 int intervals_consed;
82
74 /* Number of bytes of consing since gc before another gc should be done. */ 83 /* Number of bytes of consing since gc before another gc should be done. */
75 int gc_cons_threshold; 84 int gc_cons_threshold;
76 85
77 /* Nonzero during gc */ 86 /* Nonzero during gc */
78 int gc_in_progress; 87 int gc_in_progress;
443 interval_block_index = 0; 452 interval_block_index = 0;
444 } 453 }
445 val = &interval_block->intervals[interval_block_index++]; 454 val = &interval_block->intervals[interval_block_index++];
446 } 455 }
447 consing_since_gc += sizeof (struct interval); 456 consing_since_gc += sizeof (struct interval);
457 intervals_consed++;
448 RESET_INTERVAL (val); 458 RESET_INTERVAL (val);
449 return val; 459 return val;
450 } 460 }
451 461
452 static int total_free_intervals, total_intervals; 462 static int total_free_intervals, total_intervals;
582 XSETFLOAT (val, &float_block->floats[float_block_index++]); 592 XSETFLOAT (val, &float_block->floats[float_block_index++]);
583 } 593 }
584 XFLOAT (val)->data = float_value; 594 XFLOAT (val)->data = float_value;
585 XSETFASTINT (XFLOAT (val)->type, 0); /* bug chasing -wsr */ 595 XSETFASTINT (XFLOAT (val)->type, 0); /* bug chasing -wsr */
586 consing_since_gc += sizeof (struct Lisp_Float); 596 consing_since_gc += sizeof (struct Lisp_Float);
597 floats_consed++;
587 return val; 598 return val;
588 } 599 }
589 600
590 #endif /* LISP_FLOAT_TYPE */ 601 #endif /* LISP_FLOAT_TYPE */
591 602
661 XSETCONS (val, &cons_block->conses[cons_block_index++]); 672 XSETCONS (val, &cons_block->conses[cons_block_index++]);
662 } 673 }
663 XCONS (val)->car = car; 674 XCONS (val)->car = car;
664 XCONS (val)->cdr = cdr; 675 XCONS (val)->cdr = cdr;
665 consing_since_gc += sizeof (struct Lisp_Cons); 676 consing_since_gc += sizeof (struct Lisp_Cons);
677 cons_cells_consed++;
666 return val; 678 return val;
667 } 679 }
668 680
669 DEFUN ("list", Flist, Slist, 0, MANY, 0, 681 DEFUN ("list", Flist, Slist, 0, MANY, 0,
670 "Return a newly created list with specified arguments as elements.\n\ 682 "Return a newly created list with specified arguments as elements.\n\
712 + (len - 1) * sizeof (Lisp_Object)); 724 + (len - 1) * sizeof (Lisp_Object));
713 allocating_for_lisp = 0; 725 allocating_for_lisp = 0;
714 VALIDATE_LISP_STORAGE (p, 0); 726 VALIDATE_LISP_STORAGE (p, 0);
715 consing_since_gc += (sizeof (struct Lisp_Vector) 727 consing_since_gc += (sizeof (struct Lisp_Vector)
716 + (len - 1) * sizeof (Lisp_Object)); 728 + (len - 1) * sizeof (Lisp_Object));
729 vector_cells_consed += len;
717 730
718 p->next = all_vectors; 731 p->next = all_vectors;
719 all_vectors = p; 732 all_vectors = p;
720 return p; 733 return p;
721 } 734 }
861 p->plist = Qnil; 874 p->plist = Qnil;
862 p->value = Qunbound; 875 p->value = Qunbound;
863 p->function = Qunbound; 876 p->function = Qunbound;
864 p->next = 0; 877 p->next = 0;
865 consing_since_gc += sizeof (struct Lisp_Symbol); 878 consing_since_gc += sizeof (struct Lisp_Symbol);
879 symbols_consed++;
866 return val; 880 return val;
867 } 881 }
868 882
869 /* Allocation of markers and other objects that share that structure. 883 /* Allocation of markers and other objects that share that structure.
870 Works like allocation of conses. */ 884 Works like allocation of conses. */
920 marker_block_index = 0; 934 marker_block_index = 0;
921 } 935 }
922 XSETMISC (val, &marker_block->markers[marker_block_index++]); 936 XSETMISC (val, &marker_block->markers[marker_block_index++]);
923 } 937 }
924 consing_since_gc += sizeof (union Lisp_Misc); 938 consing_since_gc += sizeof (union Lisp_Misc);
939 misc_objects_consed++;
925 return val; 940 return val;
926 } 941 }
927 942
928 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0, 943 DEFUN ("make-marker", Fmake_marker, Smake_marker, 0, 0, 0,
929 "Return a newly allocated marker which does not point at any place.") 944 "Return a newly allocated marker which does not point at any place.")
1104 new->pos = fullsize; 1119 new->pos = fullsize;
1105 XSETSTRING (val, 1120 XSETSTRING (val,
1106 (struct Lisp_String *) current_string_block->chars); 1121 (struct Lisp_String *) current_string_block->chars);
1107 } 1122 }
1108 1123
1124 string_chars_consed += fullsize;
1109 XSTRING (val)->size = length; 1125 XSTRING (val)->size = length;
1110 XSTRING (val)->data[length] = 0; 1126 XSTRING (val)->data[length] = 0;
1111 INITIALIZE_INTERVAL (XSTRING (val), NULL_INTERVAL); 1127 INITIALIZE_INTERVAL (XSTRING (val), NULL_INTERVAL);
1112 1128
1113 return val; 1129 return val;
2393 XSETINT (end, (EMACS_INT) sbrk (0) / 1024); 2409 XSETINT (end, (EMACS_INT) sbrk (0) / 1024);
2394 2410
2395 return end; 2411 return end;
2396 } 2412 }
2397 2413
2414 DEFUN ("memory-use-counts", Fmemory_use_counts, Smemory_use_counts, 0, 0, 0,
2415 "Return a list of counters that measure how much consing there has been.\n\
2416 Each of these counters increments for a certain kind of object.\n\
2417 The counters wrap around from the largest positive integer to zero.\n\
2418 Garbage collection does not decrease them.\n\
2419 The elements of the value are as follows:\n\
2420 (CONSES FLOATS VECTOR-CELLS SYMBOLS STRING-CHARS MISCS INTERVALS)\n\
2421 All are in units of 1 = one object consed\n\
2422 except for VECTOR-CELLS and STRING-CHARS, which count the total length of\n\
2423 objects consed.\n\
2424 MISCS include overlays, markers, and some internal types.\n\
2425 Frames, windows, buffers, and subprocesses count as vectors\n\
2426 (but the contents of a buffer's text do not count here).")
2427 ()
2428 {
2429 Lisp_Object lisp_cons_cells_consed;
2430 Lisp_Object lisp_floats_consed;
2431 Lisp_Object lisp_vector_cells_consed;
2432 Lisp_Object lisp_symbols_consed;
2433 Lisp_Object lisp_string_chars_consed;
2434 Lisp_Object lisp_misc_objects_consed;
2435 Lisp_Object lisp_intervals_consed;
2436
2437 XSETINT (lisp_cons_cells_consed,
2438 cons_cells_consed & ~(1 << (VALBITS - 1)));
2439 XSETINT (lisp_floats_consed,
2440 floats_consed & ~(1 << (VALBITS - 1)));
2441 XSETINT (lisp_vector_cells_consed,
2442 vector_cells_consed & ~(1 << (VALBITS - 1)));
2443 XSETINT (lisp_symbols_consed,
2444 symbols_consed & ~(1 << (VALBITS - 1)));
2445 XSETINT (lisp_string_chars_consed,
2446 string_chars_consed & ~(1 << (VALBITS - 1)));
2447 XSETINT (lisp_misc_objects_consed,
2448 misc_objects_consed & ~(1 << (VALBITS - 1)));
2449 XSETINT (lisp_intervals_consed,
2450 intervals_consed & ~(1 << (VALBITS - 1)));
2451
2452 return Fcons (lisp_cons_cells_consed,
2453 Fcons (lisp_floats_consed,
2454 Fcons (lisp_vector_cells_consed,
2455 Fcons (lisp_symbols_consed,
2456 Fcons (lisp_string_chars_consed,
2457 Fcons (lisp_misc_objects_consed,
2458 Fcons (lisp_intervals_consed,
2459 Qnil)))))));
2460 }
2398 2461
2399 /* Initialization */ 2462 /* Initialization */
2400 2463
2401 init_alloc_once () 2464 init_alloc_once ()
2402 { 2465 {
2500 defsubr (&Smake_symbol); 2563 defsubr (&Smake_symbol);
2501 defsubr (&Smake_marker); 2564 defsubr (&Smake_marker);
2502 defsubr (&Spurecopy); 2565 defsubr (&Spurecopy);
2503 defsubr (&Sgarbage_collect); 2566 defsubr (&Sgarbage_collect);
2504 defsubr (&Smemory_limit); 2567 defsubr (&Smemory_limit);
2505 } 2568 defsubr (&Smemory_use_counts);
2569 }