1 | |
---|
2 | ////////////////////////////////////////////////////////////////////////////// |
---|
3 | // Creación de los datos |
---|
4 | |
---|
5 | Real no1 = Copy(NObject); |
---|
6 | |
---|
7 | Set matrices = For(1, 500, Matrix (Real i) { |
---|
8 | Matrix return = Rand(50000, 1, 0, 1) |
---|
9 | }); |
---|
10 | |
---|
11 | Real no2 = Copy(NObject); |
---|
12 | |
---|
13 | Real no2 - no1; // 507 |
---|
14 | // RAM: + 288 MB |
---|
15 | |
---|
16 | ////////////////////////////////////////////////////////////////////////////// |
---|
17 | // Funciones |
---|
18 | |
---|
19 | NameBlock Instance1(Set object.) { |
---|
20 | // +9 NObject |
---|
21 | NameBlock a = [[ |
---|
22 | Set data = DeepCopy(object.) |
---|
23 | ]]; |
---|
24 | a |
---|
25 | }; |
---|
26 | |
---|
27 | NameBlock Instance2(Set object.) { |
---|
28 | // Usando un artificio en la construción de la instancia |
---|
29 | // +6 NObject |
---|
30 | NameBlock a = [[ |
---|
31 | Set data = Copy(Empty) |
---|
32 | ]]; |
---|
33 | Set a::data := DeepCopy(object.); |
---|
34 | a |
---|
35 | }; |
---|
36 | |
---|
37 | NameBlock Instance3(Set object.) { |
---|
38 | // +4 NObject |
---|
39 | NameBlock a = [[ |
---|
40 | Set data = Copy(Empty) |
---|
41 | ]]; |
---|
42 | Set a::data := DeepCopy(object.); |
---|
43 | //! Si se devuelve una copia no importa dónde se asignen los datos |
---|
44 | Copy(a) |
---|
45 | }; |
---|
46 | |
---|
47 | ////////////////////////////////////////////////////////////////////////////// |
---|
48 | // Creación de las instancias |
---|
49 | |
---|
50 | Real no3 = Copy(NObject); |
---|
51 | |
---|
52 | Set matrices2 = EvalSet(matrices, Anything (Matrix m) { |
---|
53 | NameBlock _b = Instance1([[m]]); |
---|
54 | _b |
---|
55 | //Copy(_b) esto reduce más aún |
---|
56 | }); |
---|
57 | |
---|
58 | Real no4 = Copy(NObject); |
---|
59 | |
---|
60 | Real no4 - no3; // 4505, 3005, 2005 (según sea Instance1, 2 o 3) |
---|
61 | // RAM: + 288 MB |
---|
62 | |
---|
63 | ////////////////////////////////////////////////////////////////////////////// |
---|
64 | // Destrucción de los datos originales |
---|
65 | |
---|
66 | Real no5 = Copy(NObject); |
---|
67 | |
---|
68 | Set matrices := Copy(Empty); |
---|
69 | |
---|
70 | Real no6 = Copy(NObject); |
---|
71 | |
---|
72 | Real no6 - no5; // 1, -499, -499 (según sea Instance1, 2 o 3) |
---|
73 | // RAM: - 0 MB (si es Instance1) |
---|
74 | // -288 MB (si es Instance2 o 3) |
---|
75 | |
---|
76 | ////////////////////////////////////////////////////////////////////////////// |
---|
77 | |
---|
78 | |
---|
79 | |
---|