每次print一个表的时候,都输出table的“地址”,像0x5bce10这样。不禁猜测这个地址的意义?是表示这个table在进程空间的地址吗?
我决定打印出进程空间0x5bce10处的内存。
方法是用c写一个函数:
点击(此处)折叠或打开
-
int c_view_mem(lua_State *L){
-
int addr = lua_tointeger(L, -2);
-
int n = lua_tointeger(L, -1);
-
printf("addr:%x, n:%d\n", addr, n);
-
int i = 0;
-
for(i = 0; i < n; i++){
-
printf("%d ", ((int *)(addr))[i]);
-
}
-
return 0;
-
}
编译成dll,在lua里交互测试。下面是测试的记录,直接复制下来,备忘。
反正得出的结论是:
1,继续认为0x5bce10是这个table的地址,因为如果0x5bce10是个无效地址,c代码会出segment fault。
2,我测试的方法不对。因为table应该是个数据结构。我测试时计划是把它当成一个数组访问的。
-
D:\lab\lua>lua
-
Lua 5.1 Copyright (C) 1994-2006 Lua.org, PUC-Rio
-
> require "wrapper"
-
> tbl={}
-
> tbl[1]=1
-
> print(tbl)
-
table: 00000000005BCE10
-
> c_view_mem(0x5bce10,1)
-
addr:5bce10, n:1
-
6026992 > c_view_mem(0x5bce10,2)
-
addr:5bce10, n:2
-
6026992 0 > c_view_mem(0x5bce10,3)
-
addr:5bce10, n:3
-
6026992 0 5 > c_view_mem(0x5bce10,4)
-
addr:5bce10, n:4
-
6026992 0 1029 0 > c_view_mem(0x5bce10,5)
-
addr:5bce10, n:5
-
6026992 0 1029 0 0 > tbl[2]=2
-
> tbl[3]=3
-
> tbl[4]=0xcc
-
> c_view_mem(0x5bce10,10)
-
addr:5bce10, n:10
-
6026848 0 517 0 0 0 4705616 0 1725575392 0 > print tbl
-
stdin:1: '=' expected near 'tbl'
-
> print(tbl)
-
table: 00000000005BCE10
-
> c_view_mem(0x5bce10,20)
-
addr:5bce10, n:20
-
6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
-
6851 -1879047995 > c_view_mem(0x5bce10,30)
-
addr:5bce10, n:30
-
6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
-
6851 -1879047995 5995872 0 4 0 0 0 0 0 6027328 0 > print(tbl[1])
-
1
-
> print(tbl[2])
-
2
-
> c_view_mem(0x5bce10,40)
-
addr:5bce10, n:40
-
6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
-
6851 -1879047995 5995872 0 4 0 0 0 0 0 6027328 0 0 0 0 0 0 0 0 0 1648356860 -176
-
1607483 > c_view_mem(0x5bce10,50)
-
addr:5bce10, n:50
-
6026848 0 517 0 0 0 4705616 0 1725575392 0 1725575392 0 5995728 0 4 0 0 0 164835
-
6851 -1879047995 5995872 0 4 0 0 0 0 0 6027328 0 0 0 0 0 0 0 0 0 1648356860 -176
-
1607483 5995584 0 16777732 1566088248 32 0 1768191091 976304750 658319136 188693
-
8400 >
要读Lua的源码。
阅读(1293) | 评论(0) | 转发(0) |