Mercurial > emacs
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 } |
