VS2012能否将const声明的多个连续常量分配在连续的地址上?

空心菜菜籽 2018-03-08 02:46:42
各位大佬,在下目前有一个头痛的问题想请教诸位:
const UINT8 AAA[8] = {1,2,3,4,5,6,7,8};
const UINT32 BBB = 0x12345678;
const UINT32 CCC = 0x12345678;
const UINT8 DDDD[16] = {1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};
const UINT16 EEE = 16;
const INT16 FFF = 17;
const UINT8 GGG = 1;
const UINT8 HHH = 2;

要如何设置才能让他们在*.exe中的地址是连续分配的?
...全文
523 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-03-12
  • 打赏
  • 举报
回复
http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
空心菜菜籽 2018-03-10
  • 打赏
  • 举报
回复
引用 9 楼 paschen 的回复:
接楼上修改了下,不知能否满足楼主要求 #pragma pack(push, 1) typedef struct _tagMyData_t { UINT8 AAA[8]; UINT32 BBB; UINT32 CCC; UINT8 DDD[16]; UINT16 EEE; INT16 FFF; UINT8 GGG; UINT8 HHH; }MYDATA, *LPMYDATA; #pragma pack(pop) const MYDATA myData ={ { 1,2,3,4,5,6,7,8 }, //AAA 0x12345678, //BBB 0x12345678, //CCC { 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 }, //DDD 16, //EEE 17, //FFF 1, //GGG 2, //HHH }; #define AAA myData.AAA; #define BBB myData.BBB; //....补充其他的 //后续可直接使用AAA、BBB... 即不需要改变原先使用的代码
这个做法在一般的windows平台的软件的确可行,不过我现在是把嵌入式代码想在windows下做模拟,涉及到一些无法按你方法修改的问题。 所以,还是谢谢回答了。
paschen 2018-03-10
  • 打赏
  • 举报
回复
接楼上修改了下,不知能否满足楼主要求 #pragma pack(push, 1) typedef struct _tagMyData_t { UINT8 AAA[8]; UINT32 BBB; UINT32 CCC; UINT8 DDD[16]; UINT16 EEE; INT16 FFF; UINT8 GGG; UINT8 HHH; }MYDATA, *LPMYDATA; #pragma pack(pop) const MYDATA myData ={ { 1,2,3,4,5,6,7,8 }, //AAA 0x12345678, //BBB 0x12345678, //CCC { 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8 }, //DDD 16, //EEE 17, //FFF 1, //GGG 2, //HHH }; #define AAA myData.AAA; #define BBB myData.BBB; //....补充其他的 //后续可直接使用AAA、BBB... 即不需要改变原先使用的代码
空心菜菜籽 2018-03-09
  • 打赏
  • 举报
回复
坐等还有不同的答案没……
赵4老师 2018-03-09
  • 打赏
  • 举报
回复
殊不知,有时候你定义的const常量只在汇编指令的立即操作数中存在!
赵4老师 2018-03-09
  • 打赏
  • 举报
回复
引用 6 楼 pengzhexu 的回复:
[quote=引用 4 楼 zhao4zhong1 的回复:] 殊不知,有时候你定义的const常量只在汇编指令的立即操作数中存在!
意思是说此题无解喽?[/quote] 对
空心菜菜籽 2018-03-09
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
殊不知,有时候你定义的const常量只在汇编指令的立即操作数中存在!
意思是说此题无解喽?
空心菜菜籽 2018-03-09
  • 打赏
  • 举报
回复
引用 3 楼 zgl7903 的回复:
https://msdn.microsoft.com/zh-cn/library/1dc22465.aspx

void Test()
{
  extern const BYTE u8;
  extern const long uTmp;

  int i;
  i = uTmp;
  i += u8;

}

#pragma const_seg(push)
#pragma const_seg(".my_data")  
extern const char sz3[]= "test3";  
extern const char a[8] = {'a'};
extern const long uTmp = 1289;
extern const int i8 = 85;  
extern const BYTE u8 = 9;
#pragma const_seg(pop)
试了,也不行。
zgl7903 2018-03-08
  • 打赏
  • 举报
回复
https://msdn.microsoft.com/zh-cn/library/1dc22465.aspx

void Test()
{
  extern const BYTE u8;
  extern const long uTmp;

  int i;
  i = uTmp;
  i += u8;

}

#pragma const_seg(push)
#pragma const_seg(".my_data")  
extern const char sz3[]= "test3";  
extern const char a[8] = {'a'};
extern const long uTmp = 1289;
extern const int i8 = 85;  
extern const BYTE u8 = 9;
#pragma const_seg(pop)
空心菜菜籽 2018-03-08
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
用一个1字节对齐的结构体 #pragma pack(push, 1) typedef struct _tagMyData_t { UINT8 AAA[8]; UINT32 BBB; UINT32 CCC; UINT8 DDDD[16]; UINT16 EEE; INT16 FFF; UINT8 GGG; UINT8 HHH; }MYDATA, *LPMYDATA; #pragma pack(pop) const MYDATA myData = { {1,2,3,4,5,6,7,8}, //AAA 0x12345678, //BBB 0x12345678, //CCC {1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8}, //DDD 16, //EEE 17, //FFF 1, //GGG 2, //HHH };
不好意思,这种方法是可行的。 但解决不了我眼下的问题,我的困难在于我不能去改变我上面列的那种定义方式。
zgl7903 2018-03-08
  • 打赏
  • 举报
回复
用一个1字节对齐的结构体 #pragma pack(push, 1) typedef struct _tagMyData_t { UINT8 AAA[8]; UINT32 BBB; UINT32 CCC; UINT8 DDDD[16]; UINT16 EEE; INT16 FFF; UINT8 GGG; UINT8 HHH; }MYDATA, *LPMYDATA; #pragma pack(pop) const MYDATA myData = { {1,2,3,4,5,6,7,8}, //AAA 0x12345678, //BBB 0x12345678, //CCC {1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8}, //DDD 16, //EEE 17, //FFF 1, //GGG 2, //HHH };

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧