Const Array Memory Usage

Apologies if this has already been covered in another post, but if I declare an array of 1000 integers as shown below, I might expect memory usage to increase by approximately 4K bytes (like C) plus some overhead. However, I see memory usage increase by nearly 4 times this amount per the simulator (8K to 22K). Is this expected? Are those monkeys using up extra space? :D

const BIG_ARRAY = [
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380,
381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400,
401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460,
461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480,
481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500,
501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, 518, 519, 520,
521, 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540,
541, 542, 543, 544, 545, 546, 547, 548, 549, 550, 551, 552, 553, 554, 555, 556, 557, 558, 559, 560,
561, 562, 563, 564, 565, 566, 567, 568, 569, 570, 571, 572, 573, 574, 575, 576, 577, 578, 579, 580,
581, 582, 583, 584, 585, 586, 587, 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, 600,
601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620,
621, 622, 623, 624, 625, 626, 627, 628, 629, 630, 631, 632, 633, 634, 635, 636, 637, 638, 639, 640,
641, 642, 643, 644, 645, 646, 647, 648, 649, 650, 651, 652, 653, 654, 655, 656, 657, 658, 659, 660,
661, 662, 663, 664, 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680,
681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700,
701, 702, 703, 704, 705, 706, 707, 708, 709, 710, 711, 712, 713, 714, 715, 716, 717, 718, 719, 720,
721, 722, 723, 724, 725, 726, 727, 728, 729, 730, 731, 732, 733, 734, 735, 736, 737, 738, 739, 740,
741, 742, 743, 744, 745, 746, 747, 748, 749, 750, 751, 752, 753, 754, 755, 756, 757, 758, 759, 760,
761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780,
781, 782, 783, 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 800,
801, 802, 803, 804, 805, 806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 816, 817, 818, 819, 820,
821, 822, 823, 824, 825, 826, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 837, 838, 839, 840,
841, 842, 843, 844, 845, 846, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 857, 858, 859, 860,
861, 862, 863, 864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880,
881, 882, 883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900,
901, 902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920,
921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940,
941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960,
961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977, 978, 979, 980,
981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996, 997, 998, 999, 1000];
  • The thing is, unlike C, it's not an array of ints. It's an array of objects.
  • That makes sense, and I wouldn't expect the internal representation to be as efficient as C. I'm surprised it takes up so much space, though. For a homogenously typed constant array, it seems like it could be smaller.
  • In any case, the object overhead seems to be about 10 bytes per integer in this example. Maybe that's what I should expect, though.
  • I'm pretty sure you are not getting an array of objects at all (unless you are a Java programmer, in which case an array of objects is an accurate description). You are actually getting an array of pointers to objects, and each of those objects are of type Number.
  • I'm pretty sure you are not getting an array of objects at all (unless you are a Java programmer, in which case an array of objects is an accurate description). You are actually getting an array of pointers to objects, and each of those objects are of type Number.


    True, it's pointer to objects and not the objects themselves. In the same way "var xyz;" really is a pointer to an object (which is null until a value is assigned)
  • I just wish I didn't have to feed the monkeys 10 bananas for every 4 I get to eat. :D
  • I just wish I didn't have to feed the monkeys 10 bananas for every 4 I get to eat. :D


    The Monkey isn't a cheap date! :) OOPs! :)
  • This array of 64-bit integers eats up almost all of the memory by itself per the simulator (8 KB before to 62 KB after):
    const TEST = [
    1l, 2l, 3l, 4l, 5l, 6l, 7l, 8l, 9l, 10l,
    11l, 12l, 13l, 14l, 15l, 16l, 17l, 18l, 19l, 20l,
    21l, 22l, 23l, 24l, 25l, 26l, 27l, 28l, 29l, 30l,
    31l, 32l, 33l, 34l, 35l, 36l, 37l, 38l, 39l, 40l,
    41l, 42l, 43l, 44l, 45l, 46l, 47l, 48l, 49l, 50l,
    51l, 52l, 53l, 54l, 55l, 56l, 57l, 58l, 59l, 60l,
    61l, 62l, 63l, 64l, 65l, 66l, 67l, 68l, 69l, 70l,
    71l, 72l, 73l, 74l, 75l, 76l, 77l, 78l, 79l, 80l,
    81l, 82l, 83l, 84l, 85l, 86l, 87l, 88l, 89l, 90l,
    91l, 92l, 93l, 94l, 95l, 96l, 97l, 98l, 99l, 100l,
    101l, 102l, 103l, 104l, 105l, 106l, 107l, 108l, 109l, 110l,
    111l, 112l, 113l, 114l, 115l, 116l, 117l, 118l, 119l, 120l,
    121l, 122l, 123l, 124l, 125l, 126l, 127l, 128l, 129l, 130l,
    131l, 132l, 133l, 134l, 135l, 136l, 137l, 138l, 139l, 140l,
    141l, 142l, 143l, 144l, 145l, 146l, 147l, 148l, 149l, 150l,
    151l, 152l, 153l, 154l, 155l, 156l, 157l, 158l, 159l, 160l,
    161l, 162l, 163l, 164l, 165l, 166l, 167l, 168l, 169l, 170l,
    171l, 172l, 173l, 174l, 175l, 176l, 177l, 178l, 179l, 180l,
    181l, 182l, 183l, 184l, 185l, 186l, 187l, 188l, 189l, 190l,
    191l, 192l, 193l, 194l, 195l, 196l, 197l, 198l, 199l, 200l
    ];
  • I'm pretty sure I've broken this down before in this post. A Number or Float are 18 bytes each, and Long and Double are 310 bytes each. Kyle confirmed that this is not ideal, but I haven't heard about it being fixed yet either.

    Travis
  • We have a fix for the long/double issue, but it still needs to be brought into our release. I'll bring it up today and see whether we can get it moved over sooner rather than later.