Memory management method and system for dynamic object

By dynamically managing the memory of BIM component primitive objects and using flags and offset tables to dynamically allocate memory, the problem of excessive memory usage by BIM component primitive objects is solved, and software operation efficiency and user response speed are improved.

CN120803724APending Publication Date: 2025-10-17WUHAN ANZHI DIGITAL INNOVATION TECHNOLOGY CO LTD
View PDF 0 Cites 0 Cited by

Patent Information

Application Number
CN202510937114.7
Authority / Receiving Office
CN · China
Patent Type
Applications(China)
Current Assignee / Owner
Filing Date
2025-07-08
Publication Date
2025-10-17

AI Technical Summary

Technical Problem

In the prior art, memory is pre-allocated for all fields of BIM component primitive objects, resulting in excessive memory usage, low software operation efficiency, and an inability to quickly respond to user needs.

Method used

By responding to data write requests, it is determined whether memory has been allocated for the data field based on the flag of the dynamic object. The offset table and memory extension function are used to dynamically allocate memory, avoiding pre-allocation of memory for all data fields. A compact flag and shared offset table are used to manage memory.

Benefits of technology

It realizes dynamic expansion and on-demand allocation of memory, reduces memory usage, improves software operation efficiency and quick response user friendliness, reduces memory fragmentation, and improves access efficiency.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure CN120803724A_ABST
    Figure CN120803724A_ABST
Patent Text Reader

Abstract

The invention provides a memory management method and system for a dynamic object, and belongs to the technical field of memory management.The method comprises the steps that a data write-in request is responded, and whether memory is allocated to a data field of the dynamic object or not is judged based on a zone bit of the dynamic object; when the memory is not allocated to the data field, determining the offset of the data field based on the field type of the data field and a constructed offset table; the offset table comprises a mapping relationship between the field type of the data field and the offset, and the plurality of dynamic objects share the offset table; allocating a memory for the data field based on the offset, the size of the data field and a memory expansion function to obtain an optimized dynamic memory; and writing the data field into the optimized dynamic memory. According to the method, the unified offset rule is defined through sharing of the offset table, and the software operation efficiency and the scene friendliness of the user needing quick response are improved.
Need to check novelty before this filing date? Find Prior Art

Description

TECHNICAL FIELD

[0001] The present application relates to the technical field of memory management, and in particular to a dynamic object memory management method and system. BACKGROUND

[0002] In computer software development, dynamic memory management is a key technical field. Especially in the BIM industry drawing, the number of BIM components is large, and if the object memory management is not well designed, it is easy to cause memory expansion and low software operation efficiency.

[0003] In the prior art, when creating a BIM component primitive object, each BIM component primitive object is allocated memory for different types of data fields. Specifically, the BIM component primitive object includes a BIM component base class, the BIM component base class includes core data and extended data, the core data includes component unique ID (8 bytes), IFC global identifier (16 bytes), world transformation matrix (128 bytes), bounding box (48 bytes), component type (4 bytes), layer to which it belongs (2 bytes), construction phase ID (2 bytes), thermal conductivity (4 bytes), and weight (4 bytes), etc., which occupies 216 bytes of memory, and the extended data includes LOD geometry (24 bytes), material attribute set (24 bytes), IFC dynamic attribute set (24 bytes), component connection relationship (24 bytes), and modification history record (8 bytes). When the BIM component primitive object includes extended data such as LOD geometry data, material attribute set, dynamic attribute, component connection relationship, and modification history record, each BIM component primitive object includes 24+24+24+24+8=104 bytes in addition to the object core data itself. If the number of BIM component primitive objects is 1 million, the memory occupancy will be additionally occupied by about 990 M, and if the number of primitive objects is greater than 10 million, the memory occupancy will be additionally occupied by about 9918 M. The larger the software memory occupancy, the slower the software operation efficiency, and it is not friendly to scenarios that require fast response to users.

[0004] Therefore, it is necessary to provide a dynamic object memory management method and system to realize runtime dynamic management of BIM primitive dynamic objects, reduce the memory size occupied by dynamic objects, improve software operation efficiency, and thus improve the friendliness to scenarios that require fast response to users. SUMMARY

[0005] Therefore, it is necessary to provide a dynamic object memory management method and system to realize runtime dynamic management of BIM primitive dynamic objects, reduce the memory size occupied by dynamic objects, improve software operation efficiency, and thus improve the friendliness to scenarios that require fast response to users.

[0006] In a first aspect, to solve the above technical problems, the present application provides a memory management method of a dynamic object, comprising: In response to a data write request, determining whether a data field of the dynamic object has been allocated memory based on a flag bit of the dynamic object; When the data field has not been allocated memory, determining an offset of the data field based on a field type of the data field and a constructed offset table; the offset table includes a mapping relationship between the field type of the data field and the offset, and the offset table is shared by multiple dynamic objects; Allocating memory for the data field based on the offset, a size of the data field and a memory expansion function, to obtain optimized dynamic memory; Writing the data field into the optimized dynamic memory.

[0007] In a possible implementation, the determination of whether the data field of the dynamic object has been allocated memory based on the flag bit of the dynamic object comprises: Obtaining a corresponding relationship between a flag value of the flag bit and whether memory has been allocated, and determining whether the data field has been allocated memory based on the corresponding relationship.

[0008] In a possible implementation, the field type includes an LOD geometry, a material attribute set, an IFC dynamic attribute set, a component connection relationship and a modification history record; the offset includes a first offset corresponding to the LOD geometry, a second offset corresponding to the material attribute set, a third offset corresponding to the IFC dynamic attribute set, a fourth offset corresponding to the component connection relationship and a fifth offset corresponding to the modification history record, and the first offset, the second offset, the third offset, the fourth offset and the fifth offset are all different.

[0009] In a possible implementation, the allocation of memory for the data field based on the offset, the size of the data field and the memory expansion function to obtain the optimized dynamic memory comprises: Determining a write start position of the data field based on the offset; Determining an expansion size based on the write start position and the size of the data field; Allocating memory for the data field based on the expansion size and the memory expansion function to obtain the optimized dynamic memory.

[0010] In a possible implementation, the determination of the expansion size based on the write start position and the size of the data field comprises: When the allocated memory is not empty, the expansion size is the size of the data field; When the allocated memory is empty, the expansion size is the sum of the size of the data field and the byte size of the flag bit.

[0011] In a possible implementation, when the data field has been allocated memory, the data field is written into the allocated memory.

[0012] In a possible implementation, before the data field is written into the optimized dynamic memory, the method further comprises: updating the flag bit of the dynamic object.

[0013] In a possible implementation, the method further comprises: in response to a data read request, judging whether a data field to be read has been allocated memory based on a flag bit of a dynamic object; when the data field to be read has been allocated memory, determining an offset of the data field to be read based on a field type of the data field to be read and a constructed offset table, and determining a data address of the data field to be read based on the offset; reading data in the data address.

[0014] In a possible implementation, when the data field to be read has not been allocated memory, a default value is returned.

[0015] In a second aspect, the present application further provides a memory management system of a dynamic object, comprising: a flag bit judging unit, configured to, in response to a data write request, judge whether a data field of a dynamic object has been allocated memory based on a flag bit of the dynamic object; an offset determining unit, configured to, when the data field has not been allocated memory, determine an offset of the data field based on a field type of the data field and a constructed offset table; the offset table comprises a mapping relationship between the field type of the data field and the offset, and a plurality of dynamic objects share the offset table; a memory dynamic optimization unit, configured to allocate memory for the data field based on the offset, the size of the data field and a memory expansion function, to obtain an optimized dynamic memory; a data writing unit, configured to write the data field into the optimized dynamic memory.

[0016] The application has the beneficial effects that the memory management method of the dynamic object provided by the application shares the offset table by different dynamic objects, that is, the field types of the data fields of different dynamic objects are the same, and the uniform offset rule is defined by the sharing of the offset table, and in actual management, the memory can be dynamically allocated based on the flag bit and the determined offset and the size of the data field, the dynamic expansion and on-demand allocation of the memory are realized, the memory of all data fields does not need to be pre-allocated, the memory fragmentation is avoided, the occupied memory size is reduced, and then the software operation efficiency and the scene friendliness of the scene requiring fast response to the user are improved.

[0017] In addition, the writing address of the data field can be directly determined by the offset without convenience or searching, and the time complexity is O(1), and the access efficiency is further improved. BRIEF DESCRIPTION OF DRAWINGS

[0018] In order to more clearly illustrate the technical solutions in the embodiments of the application, the following will briefly introduce the drawings needed to be used in the embodiment description. Obviously, the drawings in the following description are only some embodiments of the application, and other drawings can be obtained by those skilled in the art without creative labor on the basis of these drawings.

[0019] Figure 1 An embodiment flow diagram of the memory management method of the dynamic object provided by the application is shown in the figure. Figure 2 An embodiment flow diagram of the memory management method of the dynamic object provided by the application is shown in the figure. Figure 1 An embodiment flow diagram of S103 in the application is shown in the figure. Figure 3 An embodiment flow diagram of the memory management method of the dynamic object provided by the application is shown in the figure. Figure 4 An embodiment structure diagram of the memory management system of the dynamic object provided by the application is shown in the figure. DETAILED DESCRIPTION

[0020] The technical solutions in the embodiments of the application will be described clearly and completely in the following with reference to the drawings of the embodiments of the application. Obviously, the described embodiments are only some of the embodiments of the application, not all. Based on the embodiments in the application, all other embodiments obtained by those skilled in the art without creative labor are within the protection scope of the application.

[0021] It should be understood that the accompanying drawings are not drawn to scale. The flowcharts used in the present application show the operations implemented according to some embodiments of the present application. It should be understood that the operations of the flowcharts can not be implemented in order, steps without logical context relationship can be reversed in order or implemented simultaneously. In addition, one or more other operations can be added to the flowcharts or one or more operations can be removed from the flowcharts under the guidance of the content of the present application by those skilled in the art. Some block diagrams shown in the drawings are functional entities, which do not necessarily have to correspond to physically or logically independent entities. These functional entities can be implemented in the form of software, or in one or more hardware modules or integrated circuits, or in different network and / or processor systems and / or microcontroller systems.

[0022] Reference herein to "an embodiment" means that a particular feature, structure, or characteristic described in connection with the embodiment can be included in at least one embodiment of the application. The appearances of the phrase in various places in the specification are not necessarily all referring to the same embodiment, nor are they necessarily mutually exclusive or alternative embodiments. It is explicitly and implicitly understood that the embodiments described herein can be combined with other embodiments.

[0023] The present application provides a dynamic object memory management method and system, which are described below respectively.

[0024] Figure 1 An embodiment flowchart of the dynamic object memory management method provided by the present application is shown in FIG. 1, which includes the following steps. Figure 1 As shown in FIG. 1, the dynamic object memory management method includes the following steps. S101, in response to a data write request, determining whether a data field of a dynamic object has been allocated memory based on a flag bit of the dynamic object.

[0025] The data write request can be triggered by a data write method, specifically: the data write method is a setDataX method.

[0026] It should be noted that the flag bit occupies one byte, and the specific value of the bit indicates whether the data field of different field types has been allocated memory.

[0027] S102, when the data field has not been allocated memory, determining the offset of the data field based on the field type of the data field and the constructed offset table; the offset table includes the mapping relationship between the field type of the data field and the offset, and the offset table is shared by multiple dynamic objects.

[0028] In specific embodiments of the present application, the field types include LOD geometry, material attribute set, IFC dynamic attribute set, component connection relationship and modification history record; and the offsets include a first offset corresponding to the LOD geometry, a second offset corresponding to the material attribute set, a third offset corresponding to the IFC dynamic attribute set, a fourth offset corresponding to the component connection relationship and a fifth offset corresponding to the modification history record, the first offset, the second offset, the third offset, the fourth offset and the fifth offset are all different.

[0029] For example, the first offset is 0, the second offset is 24, the third offset is 48, the fourth offset is 72 and the fifth offset is 96. Among them, the second offset of 24 indicates that the number of bytes of the LOD geometry is 24, the third offset of 48 indicates that the number of bytes of the LOD geometry and the material attribute set is 24, the fourth offset of 72 indicates that the number of bytes of the LOD geometry, the material attribute set and the IFC dynamic attribute set is 24, and the fifth offset of 96 indicates that the number of bytes of the LOD geometry, the material attribute set, the IFC dynamic attribute set and the component connection relationship is 24.

[0030] It should be understood that the offset is the sum of the sizes of all fields before the current field type.

[0031] It should be understood that when the data field has been allocated memory, the data field is directly written into the allocated memory.

[0032] S103, allocating memory for the data field based on the offset, the size of the data field and the memory expansion function, and obtaining the optimized dynamic memory.

[0033] The optimized dynamic memory needs to ensure that it can store the data field.

[0034] In specific embodiments of the present application, the memory expansion function is realloc, which can realize the elastic expansion of memory.

[0035] S104, writing the data field into the optimized dynamic memory.

[0036] It should be noted that the writing position of the data field is indicated by the dynamic memory pointer header (m_data). Specifically, the dynamic memory pointer header is a memory pointer used to store the starting position of the data field in the memory, and subsequent dynamic memory allocation will be expanded based on this address according to the size of the data field.

[0037] For example, m_data of different dynamic objects is different, if two dynamic objects are included, which are Entity 1 and Entity 2, the first offset of Entity 1 and Entity 2 is 0, and the second offset of Entity 1 and Entity 2 is 24, then the writing address of m_data is as follows: The writing address of the component unique ID of Entity 1 is: m_data1+0; The writing address of the IFC global identification of Entity 1 is: m_data1+24; The writing address of the component unique ID of Entity 2 is: m_data2+0; The writing address of the IFC global identification of Entity 2 is: m_data2+24.

[0038] When m_data1 is 0x1000, the writing address of the component unique ID of Entity 1 is 0x1000, and the writing address of the IFC global identification of Entity 1 is 0x1024, when m_data2 is 0x2000, the writing address of the component unique ID of Entity 2 is 0x2000, and the writing address of the IFC global identification of Entity 2 is 0x2024.

[0039] It should be understood that the memory management method of the dynamic object in the embodiment of the application can be implemented in any system based on the memory management method of the dynamic object, for example, a system running BIM software and the like. Specifically, the memory management method of the dynamic object is stored in the above-mentioned system in the form of a prepared program, when the system starts, the program is called, and the memory management method of the dynamic object is implemented.

[0040] Compared with the prior art, the memory management method of the dynamic object provided by the embodiment of the application shares the offset table by different dynamic objects, that is, the field types of the data fields of different dynamic objects are the same, and the unified offset rule is defined by sharing the offset table, when actually managing, the memory can be dynamically allocated based on the flag bit and the determined offset and the size of the data field, the dynamic expansion of the memory and the on-demand allocation are realized, it is not necessary to pre-allocate the memory of all data fields, the memory fragmentation is avoided, the occupied memory size is reduced, and then the software operation efficiency and the scene friendliness of the need for fast response to the user are improved.

[0041] Moreover, the writing address of the data field can be directly determined by the offset without convenience or searching, and the time complexity is O(1), which further improves the access efficiency.

[0042] To improve the efficiency of judging whether the data field has been allocated memory, in some embodiments of the present application, the judgment of whether the data field of the dynamic object has been allocated memory based on the flag bit in step S101 comprises: Obtaining the corresponding relationship between the flag value of the flag bit and whether the memory has been allocated, and judging whether the data field has been allocated memory based on the corresponding relationship.

[0043] In some embodiments of the present application, the corresponding relationship is specifically: when the data of the bit is 0, it indicates that the data field has not been allocated memory, and when the data of the bit is 1, it indicates that the data field has been allocated memory.

[0044] Since the field type includes LOD geometry, material attribute set, IFC dynamic attribute set, component connection relationship and modification history record, in order to more clearly judge whether the data field has been allocated memory, in some embodiments of the present application, the corresponding relationship is specifically: different values are used to represent whether different data fields have been allocated memory, for example: when the field type includes LOD geometry, material attribute set, IFC dynamic attribute set, component connection relationship and modification history record, then when the flag bit is 1, 2, 3, 4 and 5 respectively, it respectively indicates that the LOD geometry, material attribute set, IFC dynamic attribute set, component connection relationship and modification history record has been allocated memory.

[0045] In some embodiments of the present application, as shown in Figure 2 Step S103 comprises: S201, determining the write start position of the data field based on the offset.

[0046] Specifically, the write start position is indicated by the dynamic memory pointer head (m_data).

[0047] S202, determining the expansion size based on the write start position and the size of the data field.

[0048] S203, allocating memory for the data field based on the expansion size and the memory expansion function, and obtaining the optimized dynamic memory.

[0049] In the embodiments of the present application, the write start position of the data field is determined based on the offset, which can quickly locate the data write position, and the memory can be accurately dynamically expanded based on the size of the data field and the write start position, thereby avoiding memory waste.

[0050] Since when the allocated memory is empty, the expansion size needs to consider the byte of the flag bit, therefore, in some embodiments of the present application, step S203 is specifically: When the allocated memory is not empty, the expansion size is the size of the data field; When the allocated memory is empty, the expansion size is the sum of the size of the data field and the byte size of the flag bit.

[0051] In specific embodiments of the application, the byte size of the flag bit is 1, the first written data field should include the dynamic memory pointer header m_data, and m_data is 8 bytes. Therefore, when the allocated memory is 0 bytes, the expansion size is 1+8=9 bytes.

[0052] When the allocated memory is not empty, and the written data field is a LOD geometry of 24 bytes, the expansion size is 24 bytes.

[0053] It should be noted that after the memory allocation of the unallocated memory data field, the flag bit of the dynamic object needs to be updated to avoid repeated memory allocation when writing data to the dynamic object next time. Only the first used data field is allocated memory to further avoid the waste of pre-allocation in the traditional scheme.

[0054] Memory management includes not only data writing but also data reading. Therefore, in some embodiments of the application, as shown in Figure 3 The memory management method of the dynamic object further includes: S301, in response to a data reading request, determining whether the to-be-read data field has been allocated memory based on the flag bit of the dynamic object.

[0055] The way of determining whether the to-be-read data field has been allocated memory through the flag bit is consistent with the principle and way of determining whether the data field has been allocated memory in step S101, and will not be repeated here.

[0056] It should be noted that the data reading request can be triggered by a data reading function. Specifically, the data reading function is a getDataX method.

[0057] S302, when the to-be-read data field has been allocated memory, determining the offset of the to-be-read data field based on the field type of the to-be-read data field and the constructed offset table, and determining the data address of the to-be-read field based on the offset.

[0058] Specifically, the data address of the to-be-read field is m_data+offset.

[0059] When reading the material attribute set, the data address is m_data+24.

[0060] S303, reading the data in the data address.

[0061] It should be understood that when the to-be-read data field has not been allocated memory, a default value is returned.

[0062] The default value is a value set in advance, and in specific embodiments of the application, the default value is 0 or nullptr.

[0063] For example, if the data in the BIM component is managed, according to the traditional method, 216 bytes of memory are occupied to store the core data, and 104 bytes of memory are occupied to store the extended data, while the embodiment of the present application only needs to occupy 216 bytes of memory to store the core data by the dynamic memory elastic data management method, and 9 bytes (1 byte of flag bit and 8 bytes of dynamic memory pointer) of memory to store the extended data, greatly reducing the memory overhead of the extended data.

[0064] In summary, the embodiment of the present application dynamically manages the existence state of the dynamic object in the memory of different field types through the compact flag bit, significantly reduces the memory occupation, and quickly locates and orients the data in the memory through the globally shared offset table, improving the orientation efficiency. Further, the memory layout of the dynamic object is dynamic, and only the actually used data field is allocated memory, supporting runtime dynamic expansion and contraction of object memory, and avoiding memory waste.

[0065] In order to better implement the memory management method of the dynamic object in the embodiment of the present application, on the basis of the memory management method of the dynamic object, the embodiment of the present application also provides a memory management system of a dynamic object, as shown in Figure 4 The memory management system 400 of the dynamic object includes: The flag bit determination unit 401 is configured to determine whether the data field of the dynamic object has been allocated memory based on the flag bit of the dynamic object in response to a data write request; The offset determination unit 402 is configured to determine the offset of the data field based on the field type of the data field and the constructed offset table when the data field is not allocated memory; the offset table includes the mapping relationship between the field type of the data field and the offset, and the offset table is shared by multiple dynamic objects; The memory dynamic optimization unit 403 is configured to allocate memory for the data field based on the offset, the size of the data field and the memory expansion function, and obtain the optimized dynamic memory; The data write unit 404 is configured to write the data field into the optimized dynamic memory.

[0066] The memory management system 400 of the dynamic object provided in the above embodiment can implement the technical solutions described in the above memory management method embodiment of the dynamic object, and the principles of the implementation of the above modules or units can be referred to the corresponding content in the above memory management method embodiment of the dynamic object, which will not be described here.

[0067] Those skilled in the art can understand that all or part of the processes of the above-mentioned embodiment methods can be instructed by a computer program to relevant hardware (such as a processor, a controller, etc.) to be completed, and the computer program can be stored in a computer readable storage medium. Among them, the computer readable storage medium is a magnetic disk, an optical disk, a read-only memory or a random access memory, etc.

[0068] The above describes in detail the dynamic object memory management method and system provided by the present application. The principles and implementation manners of the present application are described by using specific examples. The above description of the embodiments is only used to help understand the method of the present application and its core idea. Meanwhile, for those skilled in the art, according to the idea of the present application, the specific implementation manners and application ranges will be changed. In summary, the content of the specification should not be understood as a limitation of the present application.

Claims

1. A memory management method for dynamic objects, characterized in that: include: In response to a data write request, determining whether memory has been allocated for a data field of the dynamic object based on a flag bit of the dynamic object; When no memory is allocated for the data field, determining the offset of the data field based on the field type of the data field and a constructed offset table; the offset table includes a mapping relationship between the field type of the data field and the offset, and multiple dynamic objects share the offset table; Allocate memory for the data field based on the offset, the size of the data field and a memory expansion function to obtain optimized dynamic memory; The data field is written into the optimized dynamic memory.

2. The memory management method for dynamic objects according to claim 1, characterized in that: The determining, based on the flag bit of the dynamic object, whether the data field of the dynamic object has been allocated memory includes: Obtain a correspondence between the flag value of the flag bit and whether memory has been allocated, and determine whether memory has been allocated to the data field based on the correspondence.

3. The memory management method for dynamic objects according to claim 1, characterized in that: The field types include LOD geometry, material property set, IFC dynamic property set, component connection relationship and modification history; the offsets include a first offset corresponding to the LOD geometry, a second offset corresponding to the material property set, a third offset corresponding to the IFC dynamic property set, a fourth offset corresponding to the component connection relationship and a fifth offset corresponding to the modification history, and the first offset, the second offset, the third offset, the fourth offset and the fifth offset are all different.

4. The memory management method for dynamic objects according to claim 1, characterized in that: The allocating memory for the data field based on the offset, the size of the data field and a memory expansion function to obtain optimized dynamic memory includes: Determine a writing start position of the data field based on the offset; Determining the expansion size based on the write start position and the size of the data field; Memory is allocated to the data field based on the expansion size and the memory expansion function to obtain the optimized dynamic memory.

5. The memory management method for dynamic objects according to claim 4, characterized in that: The determining of the expansion size based on the write start position and the size of the data field includes: When the allocated memory is not empty, the expansion size is the size of the data field; When the allocated memory is empty, the expansion size is the sum of the size of the data field and the byte size of the flag bit.

6. The memory management method for dynamic objects according to claim 1, characterized in that: When memory has been allocated to the data field, the data field is written into the allocated memory.

7. The memory management method for dynamic objects according to any one of claims 1 to 6, characterized in that: Before writing the data field into the optimized dynamic memory, the method further includes: Update the flag of the dynamic object.

8. The memory management method for dynamic objects according to claim 1, characterized in that: The method further comprises: In response to a data read request, the memory allocation for the data field to be read is determined based on the flag of the dynamic object. When memory has been allocated to the data field to be read, determining the offset of the data field to be read based on the field type of the data field to be read and the constructed offset table, and determining the data address of the field to be read based on the offset; Read the data in the data address.

9. The memory management method for dynamic objects according to claim 8, characterized in that: When no memory is allocated for the data field to be read, a default value is returned.

10. A memory management system for dynamic objects, characterized in that: include: a flag bit judgment unit, configured to respond to a data write request and judge, based on a flag bit of the dynamic object, whether memory has been allocated for a data field of the dynamic object; an offset determining unit, configured to determine an offset of the data field based on a field type of the data field and a constructed offset table when no memory is allocated to the data field; the offset table including a mapping relationship between the field type of the data field and the offset, and the offset table being shared by multiple dynamic objects; A memory dynamic optimization unit, configured to allocate memory to the data field based on the offset, the size of the data field, and a memory expansion function to obtain optimized dynamic memory; A data writing unit is used to write the data field into the optimized dynamic memory.