C / C ++中char *(字符指针)的大小是否有所不同? - 用于数据库列固定大小

时间:2014-02-27 00:38:05

标签: c++ mysql c database pointers

根据以下代码,我得到一个字符指针的大小是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 *)?

4 个答案:

答案 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位微控制器)..