当前位置:首页>python>Python ctypes.addressof() 详解:获取内存地址的利器

Python ctypes.addressof() 详解:获取内存地址的利器

  • 2026-03-23 20:12:22
Python ctypes.addressof() 详解:获取内存地址的利器
ctypes 是 Python 的一个标准库模块,它提供了与 C 语言兼容的数据类型和函数调用接口。其中 `ctypes.addressof()` 是一个非常重要的函数,它允许我们获取一个 ctypes 对象的内存地址。这个功能在需要与 C 语言代码交互、进行底层内存操作或实现特定数据结构时非常有用。
01
ctypes.addressof() 基本概念
`ctypes.addressof()` 函数用于获取一个 ctypes 对象的内存地址。它的基本语法如下:
ctypes.addressof(obj)
其中 obj 必须是一个 ctypes 实例(如 `c_int`, 或自定义的 `Structure` 等)。
1.1 与 id() 函数的区别
在 Python 中,`id()` 函数也返回对象的内存地址,但 `id()` 返回的是 Python 对象的地址,而 `ctypes.addressof()` 返回的是 ctypes 对象底层 C 数据的地址。对于简单的 ctypes 对象,两者可能相同,但对于复杂结构(如 Structure 的子对象),它们可能不同。
02
基本使用示例
让我们从一些简单的例子开始,了解 `ctypes.addressof()` 的基本用法。
2.1 基本数据类型
import ctypes# 创建一个 c_int 对象num = ctypes.c_int(42)print(f"ctypes.addressof(num): {hex(ctypes.addressof(num))}")print(f"id(num): {hex(id(num))}")  # 通常与 addressof 结果相同
2.2 指针类型
# 创建一个指针指向 numptr = ctypes.pointer(num)print(f"ctypes.addressof(ptr): {hex(ctypes.addressof(ptr))}")  # 指针对象本身的地址print(f"ptr.contents address: {hex(ctypes.addressof(ptr.contents))}")  # 指针指向的地址
2.3 数组类型
# 创建一个 c_int 数组arr = (ctypes.c_int * 3)(123)print(f"ctypes.addressof(arr): {hex(ctypes.addressof(arr))}")  # 数组首地址print(f"arr[0] address: {hex(ctypes.addressof(arr[0]))}")  # 第一个元素的地址print(f"arr[1] address: {hex(ctypes.addressof(arr[1]))}")  # 第二个元素的地址
03
自定义结构体示例
ctypes 允许我们定义自己的 C 结构体,这是 `addressof()` 特别有用的场景。
3.1 定义结构体
classPoint(ctypes.Structure):    _fields_ = [        ("x", ctypes.c_int),        ("y", ctypes.c_int)    ]# 创建结构体实例p = Point(1020)
3.2 获取结构体及其成员的地址
print(f"Point structure address: {hex(ctypes.addressof(p))}")print(f"x member address: {hex(ctypes.addressof(p.x))}")  # 错误!不能直接这样获取print(f"y member address: {hex(ctypes.addressof(p.y))}")  # 错误!不能直接这样获取
注意 :上面的代码中直接对 `p.x` 和 `p.y` 使用 `addressof()` 会引发错误,因为 `p.x` 和 `p.y` 不是独立的 ctypes 对象。正确的方法是:
# 正确获取成员地址的方法import sys# 对于简单结构体,可以使用偏移量计算# 或者使用 byref() 获取成员地址(但不直接返回整数地址)print(f"Point structure address: {hex(ctypes.addressof(p))}")# 获取成员地址的替代方法(不推荐直接使用,仅作演示)# 更安全的方法是使用 ctypes.byref() 或计算偏移量x_addr = ctypes.addressof(p) + Point.x.offset  # 需要知道成员偏移量print(f"Calculated x address: {hex(x_addr)}")
更实用的方法是使用 `ctypes.byref()` 来获取成员的引用:
# 使用 byref 获取成员引用(不直接返回地址,但可用于指针操作)x_ref = ctypes.byref(p.x)  # 这实际上等同于 ctypes.byref(p) + Point.x.offset# 但 byref() 不直接返回整数地址,要获取地址需要结合 addressof 和偏移量
3.3 更安全的结构体成员地址访问
对于结构体成员地址,更安全的方法是:
# 方法1:使用指针和偏移量(需要知道结构体布局)classPoint(ctypes.Structure):    _fields_ = [        ("x", ctypes.c_int),        ("y", ctypes.c_int)    ]defget_member_address(self, member_name):# 获取成员偏移量for field inself._fields_:if field[0] == member_name:                offset = self.__class__.__dict__[member_name].offsetreturn ctypes.addressof(self) + offsetraise ValueError(f"Member {member_name} not found")p = Point(1020)print(f"x address: {hex(p.get_member_address('x'))}")print(f"y address: {hex(p.get_member_address('y'))}")
3.4 嵌套结构体示例
classVector(ctypes.Structure):    _fields_ = [        ("dx", ctypes.c_float),        ("dy", ctypes.c_float)    ]classParticle(ctypes.Structure):    _fields_ = [        ("position", Point),        ("velocity", Vector),        ("mass", ctypes.c_float)    ]# 创建粒子实例particle = Particle(Point(12), Vector(0.5, -0.5), 1.0)# 获取各部分地址print(f"Particle address: {hex(ctypes.addressof(particle))}")print(f"Position address: {hex(ctypes.addressof(particle.position))}")print(f"Velocity address: {hex(ctypes.addressof(particle.velocity))}")print(f"Mass address: {hex(ctypes.addressof(particle.mass))}")  # 错误!不能直接这样获取# 正确获取 mass 地址的方法mass_addr = ctypes.addressof(particle) + Particle.mass.offsetprint(f"Calculated mass address: {hex(mass_addr)}")
04
与 C 代码交互示例
`ctypes.addressof()` 在与 C 代码交互时特别有用。让我们看一个完整的例子。
4.1 C 代码 (example.c)
#include<stdio.h>typedefstruct {int x;int y;} Point;voidprint_point_address(Point *p) {printf("Point address from C: %p\n", (void*)p);printf("Point x value: %d\n", p->x);printf("Point y value: %d\n", p->y);}voidmodify_point(Point *p, int new_x, int new_y) {    p->x = new_x;    p->y = new_y;}
编译为共享库:
gcc -shared -o libexample.so -fPIC example.c
4.2 Python 代码
import ctypes# 加载共享库lib = ctypes.CDLL('./libexample.so')# 定义 Point 结构体classPoint(ctypes.Structure):    _fields_ = [        ("x", ctypes.c_int),        ("y", ctypes.c_int)    ]# 设置函数原型lib.print_point_address.argtypes = [ctypes.POINTER(Point)]lib.print_point_address.restype = Nonelib.modify_point.argtypes = [ctypes.POINTER(Point), ctypes.c_int, ctypes.c_int]lib.modify_point.restype = None# 创建 Point 实例p = Point(1020)# 获取地址并传递给 C 函数p_addr = ctypes.addressof(p)print(f"Point address from Python: {hex(p_addr)}")# 将 Python 的 Point 指针传递给 C 函数# 方法1:使用 ctypes.byref()print("\nUsing ctypes.byref():")lib.print_point_address(ctypes.byref(p))# 方法2:创建指针对象print("\nUsing ctypes.pointer():")p_ptr = ctypes.pointer(p)print(f"Pointer address in Python: {hex(ctypes.addressof(p_ptr))}")print(f"Pointer value (points to): {hex(p_ptr.contents.x)}")  # 不直接显示地址lib.print_point_address(p_ptr)# 修改 Point 的值print("\nModifying Point from C:")lib.modify_point(ctypes.byref(p), 100200)print(f"After modification - x: {p.x}, y: {p.y}")
05
高级应用:实现自定义内存管理
`ctypes.addressof()` 可以用于实现更复杂的内存管理场景,比如直接操作内存缓冲区。
5.1 直接操作内存缓冲区
import ctypes# 创建一个大的缓冲区buffer_size = 1024buffer = (ctypes.c_ubyte * buffer_size)()# 获取缓冲区地址buffer_addr = ctypes.addressof(buffer)print(f"Buffer address: {hex(buffer_addr)}")# 直接操作内存(不推荐,仅作演示)# 将前4字节设置为 0x12345678 (小端序)# 注意:这需要知道系统字节序value = 0x12345678ctypes.memmove(buffer_addr, ctypes.byref(ctypes.c_int32(value)), 4)# 读取验证read_value = ctypes.c_int32.from_buffer(buffer, 0).valueprint(f"Read value: {hex(read_value)}")
5.2 与 numpy 数组交互
import numpy as np# 创建 numpy 数组arr = np.array([12345], dtype=np.int32)# 获取 numpy 数组的数据缓冲区地址# 方法1:使用 ctypes.addressof() (需要先转换为 ctypes 数组)# 注意:这不是直接获取 numpy 数组地址的标准方法# 更推荐使用 numpy.ctypeslib 或 __array_interface__# 更正确的方法:arr_ptr = arr.ctypes.data_as(ctypes.POINTER(ctypes.c_int))print(f"NumPy array address: {hex(arr.ctypes.data)}")# 通过 ctypes 访问 numpy 数组元素for i inrange(len(arr)):print(f"Element {i}{arr_ptr[i]}")
06
安全注意事项
使用 `ctypes.addressof()` 时需要注意以下几点:
  1. 不要修改非指针类型的数据 :直接通过地址修改数据可能导致内存损坏或段错误。
  2. 生命周期管理 :确保获取地址的对象在其被使用期间保持有效。
  3. 类型安全 :确保通过地址访问的数据类型与实际存储的数据类型匹配。
  4. 平台兼容性 :不同平台可能有不同的内存布局和对齐要求。
6.1 错误示例
import ctypes# 创建一个局部变量num = ctypes.c_int(42)# 获取地址addr = ctypes.addressof(num)# 函数结束后 num 可能不再有效defget_address():    local_num = ctypes.c_int(100)return ctypes.addressof(local_num)  # 危险!返回局部变量的地址# bad_addr = get_address()  # 不要这样做!
07
替代方案比较
除了 `ctypes.addressof()`,还有其他几种获取内存地址的方法:
  1. id() 函数 :
  • 返回 Python 对象的地址
  • 不适用于需要 C 数据地址的场景
  1. ctypes.byref()
ctypes.byref()
  • 返回一个轻量级指针对象
  • 不直接给出整数地址
  • 更安全,推荐用于函数参数传递
  1. ctypes.pointer()
ctypes.pointer()
  • 创建完整的指针对象
  • 可以通过 `ctypes.addressof()` 获取指针本身的地址
  • 要获取指向的数据地址需要访问 `.contents` 属性
7.1 比较示例
import ctypesnum = ctypes.c_int(42)# 方法1: addressofaddr1 = ctypes.addressof(num)print(f"addressof: {hex(addr1)}")# 方法2: byref (返回指针对象,不直接是地址)ref = ctypes.byref(num)# 要获取地址需要间接方式(不推荐)print(f"byref type: {type(ref)}")  # <class 'ctypes.byref_object'># 方法3: pointerptr = ctypes.pointer(num)print(f"pointer object address: {hex(ctypes.addressof(ptr))}")  # 指针对象本身的地址print(f"pointer value (points to): {hex(ctypes.addressof(ptr.contents))}")  # 指向的地址
08
完整案例:实现一个简单的 C 风格字符串操作
import ctypes# 定义 C 函数原型 (假设在 libstring.so 中)# extern "C" {#     void reverse_string(char *str);#     int string_length(const char *str);# }# 加载库lib = ctypes.CDLL('./libstring.so')# 设置函数原型lib.reverse_string.argtypes = [ctypes.c_char_p]lib.reverse_string.restype = Nonelib.string_length.argtypes = [ctypes.c_char_p]lib.string_length.restype = ctypes.c_int# 创建可修改的 C 字符串# 方法1: 使用 create_string_buffers = ctypes.create_string_buffer(b"Hello, World!")print(f"Original string: {s.raw}")print(f"String address: {hex(ctypes.addressof(s))}")# 调用 C 函数反转字符串lib.reverse_string(s)print(f"Reversed string: {s.raw}")# 方法2: 使用固定大小的数组char_array = (ctypes.c_char * 20)()char_array.value = b"Python ctypes"print(f"\nOriginal array: {char_array.raw}")print(f"Array address: {hex(ctypes.addressof(char_array))}")lib.reverse_string(char_array)print(f"Reversed array: {char_array.raw}")# 计算字符串长度length = lib.string_length(char_array)print(f"String length: {length}")
09
性能考虑
`ctypes.addressof()` 本身是一个简单的操作,性能开销很小。但在高性能场景中,需要注意:
  1. 频繁的地址获取可能影响性能
  2. 通过地址直接访问数据绕过了 Python 的类型检查
  3. 考虑使用 `ctypes.byref()` 或 `ctypes.pointer()` 作为替代,它们在某些情况下可能更高效`ctypes.addressof()` 是 ctypes 模块中一个强大但需要谨慎使用的功能,它允许我们获取 ctypes 对象的底层内存地址。主要用途包括:
  4. 与 C 代码交互时传递对象地址
  5. 实现自定义内存管理
  6. 直接操作内存缓冲区(高级用法)
  7. 调试和内存分析
使用时需要特别注意:
  • 对象生命周期管理
  • 类型安全
  • 平台兼容性
  • 避免直接通过地址修改数据(除非完全理解后果)
对于大多数用例,推荐优先使用 `ctypes.byref()` 或 `ctypes.pointer()` 来传递参数,它们更安全且能自动处理许多细节。`addressof()` 更适合需要直接操作内存地址的低级场景。
通过合理使用 `ctypes.addressof()`,我们可以实现 Python 与 C 代码之间的高效交互,构建高性能的系统组件,或实现特定的内存操作需求。

最新文章

随机文章

基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-03-27 09:50:58 HTTP/2.0 GET : https://f.mffb.com.cn/a/481996.html
  2. 运行时间 : 0.103404s [ 吞吐率:9.67req/s ] 内存消耗:4,923.85kb 文件加载:140
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=856282dc6c39832164c2e9ffdb0a3dc2
  1. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/composer/autoload_static.php ( 4.90 KB )
  7. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  10. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  11. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  12. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  13. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  14. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  15. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  16. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  17. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  18. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  19. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  21. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  22. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/provider.php ( 0.19 KB )
  23. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  24. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  25. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  26. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/common.php ( 0.03 KB )
  27. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  28. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  29. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/app.php ( 0.95 KB )
  30. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cache.php ( 0.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/console.php ( 0.23 KB )
  32. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/cookie.php ( 0.56 KB )
  33. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/database.php ( 2.48 KB )
  34. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  35. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/filesystem.php ( 0.61 KB )
  36. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/lang.php ( 0.91 KB )
  37. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/log.php ( 1.35 KB )
  38. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/middleware.php ( 0.19 KB )
  39. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/route.php ( 1.89 KB )
  40. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/session.php ( 0.57 KB )
  41. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/trace.php ( 0.34 KB )
  42. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/config/view.php ( 0.82 KB )
  43. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/event.php ( 0.25 KB )
  44. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  45. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/service.php ( 0.13 KB )
  46. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/AppService.php ( 0.26 KB )
  47. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  48. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  49. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  50. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  51. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  52. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/services.php ( 0.14 KB )
  53. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  54. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  55. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  56. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  57. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  58. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  59. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  60. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  61. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  62. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  63. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  64. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  65. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  66. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  67. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  68. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  69. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  70. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  71. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  72. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  73. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  74. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  75. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  76. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  77. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  78. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  79. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  80. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  81. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  82. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  83. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/Request.php ( 0.09 KB )
  84. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  85. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/middleware.php ( 0.25 KB )
  86. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  87. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  88. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  89. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  90. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  91. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  92. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  93. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  94. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  95. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  96. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  97. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  98. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  99. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/route/app.php ( 1.72 KB )
  100. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  101. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  102. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  103. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/controller/Index.php ( 4.81 KB )
  104. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/app/BaseController.php ( 2.05 KB )
  105. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  106. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  108. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  109. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  110. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  111. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  112. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  113. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  114. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  115. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  116. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  117. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  118. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  119. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  120. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  121. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  122. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  123. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  124. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  125. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  126. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  127. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  128. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  129. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  130. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  131. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  132. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  133. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  134. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  135. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  136. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  137. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  138. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  139. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/runtime/temp/067d451b9a0c665040f3f1bdd3293d68.php ( 11.98 KB )
  140. /yingpanguazai/ssd/ssd1/www/f.mffb.com.cn/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000601s ] mysql:host=127.0.0.1;port=3306;dbname=f_mffb;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000664s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000239s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000256s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000548s ]
  6. SELECT * FROM `set` [ RunTime:0.000188s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000489s ]
  8. SELECT * FROM `article` WHERE `id` = 481996 LIMIT 1 [ RunTime:0.000585s ]
  9. UPDATE `article` SET `lasttime` = 1774576258 WHERE `id` = 481996 [ RunTime:0.010064s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 66 LIMIT 1 [ RunTime:0.000282s ]
  11. SELECT * FROM `article` WHERE `id` < 481996 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.000689s ]
  12. SELECT * FROM `article` WHERE `id` > 481996 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001107s ]
  13. SELECT * FROM `article` WHERE `id` < 481996 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.001166s ]
  14. SELECT * FROM `article` WHERE `id` < 481996 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.000711s ]
  15. SELECT * FROM `article` WHERE `id` < 481996 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.000756s ]
0.105070s