const变量与define定义常量的区别

一、概念性区别

const 变量就是在普通变量前边加上一个关键字const,它赋值的唯一机会就是“定义时”,此变量不能被程序修改,存储在rodata区。

define定义的是常量,不是变量,所以编译器就不会给define定义的宏名字分配存储单元。通常来说,编译器对常量的处理方式是嵌入到代码中,以立即数的方式出现。

二、测试

1、const测试 

const测试程序

#include <stdio.h>
#include <stdlib.h>
const char ch = 'a';
int Main()
{
    volatile int i = ;
    printf("hello,embeded world %d\n",i);

}

反汇编

Disassembly of section .rodata:
<ch>:
: andeq r0, r0, r1, rrx

2、define测试 

define测试程序

#include <stdio.h>
#include <stdlib.h>
#define ch 'a'
int Main()
{
    volatile int i = ;
    printf("hello,embeded word %c\n",ch);

}

反汇编

 <Main>:
   :    e1a0c00d     mov    ip, sp
   :    e92dd800     stmdb    sp!, {fp, ip, lr, pc}
   :    e24cb004     sub    fp, ip, #    ; 0x4
   c:    e24dd004     sub    sp, sp, #    ; 0x4
  :    e3a03005     mov    r3, #    ; 0x5
  :    e50b3010     str    r3, [fp, #-]
  :    e59f000c     ldr    r0, [pc, #]    ; 2c <.text+0x2c>
  1c:    e3a01061     mov    r1, #97    ; 0x61
  :    ebfffffe     bl     <Main+0x20>
  :    e1a00003     mov    r0, r3
  :    e89da808     ldmia    sp, {r3, fp, sp, pc}
  2c:         andeq    r0, r0, r0 
上一篇:MYSQL 之 JDBC(十六): DBUtils


下一篇:通过perf 查看mysql 堆栈