Ejemplo n.º 1
0
inline static void*
fill_prefix(char* ptr) {
	uint32_t handle = skynet_current_handle();
	size_t size = je_malloc_usable_size(ptr);
	uint32_t *p = (uint32_t *)(ptr + size - sizeof(uint32_t));
	memcpy(p, &handle, sizeof(handle));

	update_xmalloc_stat_alloc(handle, size);
	return ptr;
}
Ejemplo n.º 2
0
inline static void*
fill_prefix(char* ptr) {
	uint32_t handle = skynet_current_handle();
	size_t size = je_malloc_usable_size(ptr);
	struct mem_cookie *p = (struct mem_cookie *)(ptr + size - sizeof(struct mem_cookie));
	memcpy(&p->handle, &handle, sizeof(handle));
#ifdef MEMORY_CHECK
	uint32_t dogtag = MEMORY_ALLOCTAG;
	memcpy(&p->dogtag, &dogtag, sizeof(dogtag));
#endif
	update_xmalloc_stat_alloc(handle, size);
	return ptr;
}
Ejemplo n.º 3
0
inline static void*
fill_prefix(char* ptr) {
	uint32_t handle = server_current_handle();
	/*
		函数是malloc_usable_size(),它返回在一个预先分配的内存块里你实际能使用的字节数。
		这个值可能会比你最初请求的值要大,因为内存齐和最小内存分配值约束。
		例如,如果你分配30字节,但是可使用的的大小是36,这意味着你可以向那块内存写入36个字节而
		不会覆盖其它内存块。这是一个非常糟糕和依赖版本的编程实践,然而,请不要这要做。
		malloc_usable_size()最有用的使用可能是作为一个调试工具。
		例如,它能够在写入一个从外部传入的内存块之前,检查它的大小。
	*/
	size_t size = malloc_usable_size(ptr);
	uint32_t *p = (uint32_t *)(ptr + size - sizeof(uint32_t));
	memcpy(p, &handle, sizeof(handle));

	update_xmalloc_stat_alloc(handle, size);
	return ptr;
}