Используйте vulkan Graphic API. Allocate Memondement Device:
Это моя часть тестового кода Vulkan:
VertexBuffer vertex_buffer;
VkMemoryAllocateInfo memAlloc{};
memAlloc.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
VkMemoryRequirements memReqs;
VkBufferCreateInfo vertexBufferInfoCI{};
vertexBufferInfoCI.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
vertexBufferInfoCI.size = block_size * number;
// Create a device local buffer to which the (host local) vertex data will be copied and which will be used for rendering
vertexBufferInfoCI.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
(vkCreateBuffer(device, &vertexBufferInfoCI, nullptr, &vertex_buffer.buffer));
vkGetBufferMemoryRequirements(device, vertex_buffer.buffer, &memReqs);
memAlloc.allocationSize = memReqs.size;
memAlloc.memoryTypeIndex = getMemoryTypeIndex(memReqs.memoryTypeBits, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
(vkAllocateMemory(device, &memAlloc, nullptr, &vertex_buffer.memory));
(vkBindBufferMemory(device, vertex_buffer.buffer, vertex_buffer.memory, 0));
vertex_buffers.push_back(vertex_buffer);
< /code>
- После выделения (100000000 * 1) память размера блока. < /p>
Используется только почти 0,1 г памяти по графическим процессорам. < /p>
< /li>
Повторно выделяя 1 -ти размером память 100000000. MEMOM!if(once_allocate)
{
auto once_blocks = new char[block_size * buffer_number];
for (uint64_t index = 0; index < buffer_number; index++)
{
once_blocks[index] = 'i';
}
}
else
{
for (uint64_t index = 0; index < buffer_number; index++)
{
auto ps = new char[block_size];
for (int i = 0; i < block_size; i++)
{
ps = 'i';
}
}
}
< /code>
после выделения (100000000 * 1) память размера блока. < /p>
Используется почти 0,1 г локальной памяти хоста. < /p>
< /li>
Повторяя 1 -й размер. память.
Подробнее здесь: https://stackoverflow.com/questions/795 ... ed-to-host
Мобильная версия