+int data_program_region_compare(void *d1, void *d2, size_t size){
+ int distance = 0;
+ int pointer_align;
+ int i;
+
+ for(i=0; i<size; i++){
+ if(memcmp(((char *)d1) + i, ((char *)d2) + i, 1) != 0){
+ fprintf(stderr,"Different byte (offset=%d) (%p - %p) in data program region\n", i, (char *)d1 + i, (char *)d2 + i);
+ distance++;
+ pointer_align = (i /sizeof(void *)) * sizeof(void *);
+ fprintf(stderr, "Pointer address : %p - %p\n", (char *)d1 + pointer_align, (char *)d2 + pointer_align);
+ fprintf(stderr, "Pointed address : %p - %p\n", *((void **)((char *)d1 + pointer_align)), *((void **)((char *)d2 + pointer_align)));
+ }
+ }
+
+ fprintf(stderr, "Hamming distance between data program regions : %d", distance);
+
+ return distance;
+}
+
+int data_libsimgrid_region_compare(void *d1, void *d2, size_t size){
+ int distance = 0;
+ int pointer_align;
+ int i;
+
+ for(i=0; i<size; i++){
+ if(memcmp(((char *)d1) + i, ((char *)d2) + i, 1) != 0){
+ fprintf(stderr, "Different byte (offset=%d) (%p - %p) in data libsimgrid region", i, (char *)d1 + i, (char *)d2 + i);
+ distance++;
+ pointer_align = (i /sizeof(void *)) * sizeof(void *);
+ fprintf(stderr, "Pointer address : %p - %p\n", (char *)d1 + pointer_align, (char *)d2 + pointer_align);
+ fprintf(stderr, "Pointed address : %p - %p\n", *((void **)((char *)d1 + pointer_align)), *((void **)((char *)d2 + pointer_align)));
+ }
+ }
+
+ fprintf(stderr, "Hamming distance between data libsimgrid regions : %d", distance);
+
+ return distance;
+}
+