sizeof(void*)

在vs中,Win32 和 X64 的结果不同:
(1)Win32 平台结果是4
(2)X64平台结果是8

只要是指针,不只是void*,包括char* 或 int*,结果都是一样。
原因就是指针存放的是内存地址,所以Win32 索引32位地址(4字节),X64索引64位地址(8字节)

最后给一段干坏事的代码,很简单,但是跟上面说的贴切,用 Win32 指令编译是只能吃掉4G,但是用 X64 就一定可以吃干你的内存 ~.~,原理同上

#include <iostream>
using namespace std;

int main()
{
    while (1)
        malloc(sizeof(int));
    return 0;
}
时间: 2024-08-12 21:27:27

sizeof(void*)的相关文章

指针-memset((void *)&amp;amp;amp;hostaddr, 0, sizeof(hostaddr));

问题描述 memset((void *)&hostaddr, 0, sizeof(hostaddr)); 今天在看别人讲Socket编程的博客,里面有这么一句话,初始化客户端地址的.为什么要在&hostaddr前面加上(void*)?百度百科上面memset函数的原型是void *memset(void *s, int ch, size_t n),第一个参数传递一个指针进去就行了,那么&hostaddr不就是指针了吗?那为什么还要加(void*),(void*)在这个语句里面有什么

深入sizeof的使用详解_C 语言

    经常在C下编程,不了解精通sizeof就有点说不过去了,本文可没有sizeof与strlen的区别哦,尽管这个对比很经典,不过,将就点吧. 一.sizeof的概念 sizeof是C语言的一种单目操作符,如C语言的其他操作符++.--等.它并不是函数.sizeof操作符以字节形式给出了其操作数的存储大小.    操作数可以是一个表达式或括在括号内的类型名.操作数的存储大小由操作数的类型决定. 二.sizeof的使用方法1.用于数据类型 sizeof使用形式:sizeof(type) 数据类

sizeof()的简单介绍_C 语言

(一)基本概念     sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类型名.操作数的存储大小由操作数的类型决定. (二)使用方法 1.用于数据类型     sizeof使用形式:sizeof(type) ,如sizeof(int) 2.用于变量     sizeof使用形式:sizeof(var_name)或sizeof var_name     变量名可以不用括号括住.如sizeof (var_name),sizeof var_name等都是正确形

剖析一个由sendfile引发的linux内核BUG

在论坛上看到一个讲linux内核BUG的帖子,利用这个BUG,一个普通用户能够在运行某个程序之后,获得root权限. 示例的代码如下:http://www.securityfocus.com/data/vulnerabilities/exploits/36038-4.tgz 在ubuntu 9.04,内核版本2.6.28.12的机器上测试通过. (警告,此BUG已经是公开的秘密了.如果想用来干坏事,是很容易被发现的,并且将受到法律的制裁!) 也希望linux内核尽快修复该BUG. 那么,这究竟是

COM编程入门第二部分——深入COM服务器

本文为刚刚接触COM的程序员提供编程指南,解释COM服务器内幕以及如何用C++编写自己的接口.继上一篇COM编程入门之后,本文将讨论有关 COM服务器的内容,解释编写自己的COM接口和COM服务器所需要的步骤和知识,以及详细讨论当COM库对COM服务器进行调用时,COM服务器运行的 内部机制. 如果你读过上一篇文章.应该很熟悉COM客户端是怎么会事了.本文将讨论COM的另一端--COM服务器.内容包括如何用C++编写一个简单的不涉及 类库的COM服务器.深入到创建COM服务器的内部过程,毫无遮掩

C#里使用指针

    指针在C\C++里面可是一个好东西,但是到java,.net的时代指针已经被封装起来,对用户不可见,这点java做的非常的彻底..net可能因为还存在一个托管C++,因此指针并没有完全废除,C#还是保留了指针的操作.       要使用指针首先要对使用指针的代码用unsafe进行进行声明,声明和public声明一样,可以对整个类进行声明,也可以是类里面某个方法或者属性.在代码里什么后,还需要修改工程项目的Build属性,让编译器支持指针的操作.       做好事前的工作就可以使用指针了

高质量C++/C编程指南-第7章-内存管理(6)

7.10 malloc/free 的使用要点函数malloc的原型如下: void * malloc(size_t size); 用malloc申请一块长度为length的整数类型的内存,程序如下: int *p = (int *) malloc(sizeof(int) * length); 我们应当把注意力集中在两个要素上:"类型转换"和"sizeof". u malloc返回值的类型是void *,所以在调用malloc时要显式地进行类型转换,将void * 转

声明函数指针并实现回调

程序员常常需要实现回调.本文将讨论函数指针的基本原则并说明如何使用函数指针实现回调.注意这里针对的是普通的函数,不包括完全依赖于不同语法和语义规则的类成员函数(类成员指针将在另文中讨论). 声明函数指针 回调函数是一个程序员不能显式调用的函数:通过将回调函数的地址传给调用者从而实现调用.要实现回调,必须首先定义函数指针.尽管定义的语法有点不可思议,但如果你熟悉函数声明的一般方法,便会发现函数指针的声明与函数声明非常类似.请看下面的例子: void f():// 函数原型 上面的语句声明了一个函数

uclinux-2008R1-RC8(bf561)到VDSP5的移植(61):KBUILD_MODNAME

在一些以模块方式提供的驱动中,使用了module_param这个宏来定义一些参数,这个宏将引起一个语法错误: "../../drivers/net/dm9000.c", line 124: cc0020: error: identifier "KBUILD_MODNAME" is undefined module_param(watchdog, int, 0400); 看看module_param的定义: #define module_param(name, typ