根据以下代码,我得到一个字符指针的大小是8个字节。然而,对于char指针,此site的大小为1个字节。
#include <stdio.h>
int main(void ){
char *a = "saher asd asd asldasdas;daksd ahwal";
printf(" nSize = %d \n", sizeof(a));
return 0;
}
总是这样吗?我正在为我正在实现的简单数据库编写连接器,并希望将mysql的TEXT字段读入我的数据库。由于TEXT具有可变大小,我想知道我的列类型/元数据是否可以具有8字节的固定大小,其中我将指针在内存中存储到字符串(char *)?
答案 0 :(得分:2)
不,不是。指针的大小取决于CPU架构。根据指针的“类型”,某些体系结构甚至具有不同的大小。在x86_64上,指针是48位宽。使用64位是因为各个位不可寻址。但是,可以使用指针打包将指针序列化/反序列化为48位块。
答案 1 :(得分:2)
根据以下代码,我得到一个字符指针的大小是8个字节。然而,此站点的char指针大小为1个字节。
它是实现定义的。它通常在64位Intel系统上为8,在32位Intel系统上为4。不要依赖它的任何特定尺寸。
我正在编写一个我正在实现的简单数据库的连接器,并希望将mysql的TEXT字段读入我的数据库。由于TEXT具有可变大小,我想知道我的列是否可以具有8字节的固定大小,其中我将指针在内存中存储到字符串(char *)?
将指针存储到数据库的内存中完全没有意义。数据库用于持久数据。另一方面,只要进程退出(或系统重新启动),存储在内存中的数据就很容易消失。
答案 2 :(得分:1)
根据您使用的计算机,变量可以是不同的大小。这导致您的结果与您在线看到的结果之间存在差异。
但是,变量在同一台机器上的大小始终相同。
答案 3 :(得分:1)
一个平台中任何指针的大小都相同..无论数据类型为char,string,object等。 在具有64操作系统的PC(以及编译器支持64位)中,指针的大小为8字节(64位地址空间)。 另一个平台可能有4字节,2字节或1字节(如8位微控制器)..