【发布时间】:2010-03-03 02:44:05
【问题描述】:
以下代码sn-p来自The Official GNOME 2 Developer's Guide:
GMemChunk my_chunk;
my_chunk = g_mem_chunk_new("My Chunk",
42,
42*16,
G_ALLOC_AND_FREE);
gchar *data[50000];
gint i;
/* allocate 40,000 atoms */
for(i = 0; i < 40000; i++)
{
data[i] = g_mem_chunk_alloc(my_chunk);
}
这是否意味着每个原子都是 42 字节,每个“内存块”包含
4216 个原子,运行上述代码时会创建40000/16=2500内存块?他们为什么在这里使用 gchar*?运行
data[i] = g_mem_chunk_alloc(my_chunk);时是否会发生从 gpointer (void*) 到 gchar* 的隐式转换?如果上述陈述为真,则每个 gchar* 指向 42 字节的内存。那么如何访问特定原子的所有字节呢?
data[7]+41会是一个可用的内存位置吗?
-
当我尝试编译代码时,gcc 会产生以下错误消息:
error: storage size of ‘my_chunk’ isn’t known怎么了?
【问题讨论】:
标签: c glib void-pointers dynamic-memory-allocation