我一直在尝试为预先分配的内存实现碎片整理程序。假设我们有<!DOCTYPE html>
<html lang="en">
<head>
<title>Bootstrap Example</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
<div class=" popr form-group" data-id="1">
<a href="#" data-placement="bottom" title="Bill Category"><input class="form-control input-sm" id="messageTextBox" type="text" placeholder="Select category">
</a>
</div>
<!-- loaded popover content -->
<div id="popover-section selectBox">
<div class="selectBox" class="popr-box" data-box-id="1">
<div id="title-pop" class=" popr-item">Bill category
</div>
<a href="#" title="Menu" data-toggle="popover" data-content="Menu Item 1" data-trigger="hover"><div class="popr-item">Menu Item 1</div></a>
<a href="#" title="Menu" data-toggle="popover" data-content="Menu Item 2" data-trigger="hover"><div class="popr-item">Menu Item 2</div></a>
<a href="#" title="Menu" data-toggle="popover" data-content="Menu Item 3" data-trigger="hover"><div class="popr-item">Menu Item 3</div></a>
</div>
</div>
</div>
<script>
$(document).ready(function() {
$('[data-toggle="popover"]').popover();
$('[data-toggle="popover"]').on("click",function(){
$("#messageTextBox").val($(this).find("div").text());
});
});
</script>
</body>
</html>
的预分配内存的void指针:
sizeof(int) * 3
初始化第一和第三块内存
void* ptr = operator new(sizeof(int) * 3);
以下是我的问题:是否可以在不知道值类型的情况下将值从int *one = new (ptr) int(1);
int *three = new (ptr + sizeof(int) * 2) int(3);
(* 3)转移到第二(ptr + sizeof(int) * 2)
位置?
(ptr + sizeof(int))
不是一种选择。
答案 0 :(得分:3)
没有。您必须知道void*
已删除的类型的大小。如果您无法恢复类型(int
),或者更确切地说类型占用的字节数(sizeof(int)
),则无法可靠地操作底层内存。
答案 1 :(得分:0)
是的,您需要知道并保留存储类型的大小。更重要的是,存储类型必须为trivial,至少为trivially copyable。否则,存储的对象可能会非常惊讶地发现自己在内存中移动。如果您需要支持此类非平凡类型,则必须使用其真实副本或移动构造函数或赋值运算符。