C :: Structure Padding To 16 Bytes For Use With Atomic Instructions

Jun 30, 2013

I am using atomic instructions on x64 and variables so used must be 16 byte aligned.

I use a number of structures where their members are so operated upon.

The structures accordingly needs must be 16 byte aligned and padded - their internal members must be on 16 byte boundaries and, crucially, there must be tail padding to a 16 byte boundary, so I can allocate arrays of these structures and use pointer math to iterate. (I am naturally using aligned malloc).

The problem I am finding is that it is not apparent to me how to achieve this end. Here below we have a test structure (currently I'm working with the latest Amazon Linux GCC, 4.6.3, on x64);

Code:
#define LFDS700_ALIGN_DOUBLE_POINTER 16
#define LFDS700_ALIGN(alignment) __attribute__( (aligned(alignment)) )
LFDS700_ALIGN(LFDS700_ALIGN_DOUBLE_POINTER) struct test_element
{
struct lfds700_freelist_element

[Code] ....

I allocate an array of test elements, thus;

Code:
te_array = abstraction_aligned_malloc( sizeof(struct test_element) * 100000, LFDS700_ALIGN_DOUBLE_POINTER );

The problem manifest is that sizeof(struct test_element) is 40 bytes! So the second element does not begin on a 16 byte boundary and we all fall down. Printing the addresses of the first element in the test element array, I see the following;

Code:
(gdb) print *ts->te_array
$2 = {fe = {next = {0x7fffec0008d0, 0x2}, user_data = 0x7fffdc0008d0}, thread_number = 3, datum = 0}
(gdb) print sizeof(struct test_element)
$3 = 40
(gdb) print &ts->te_array->fe.next

[Code] ....

So we see fe->next is the first element and so is correctly aligned curtsey of aligned malloc, where fe->next is 16 bytes, fe->user_data is correctly aligned, but then te->thread_number is misaligned and te->datum is given eight bytes rather than four, leaving us in the end without correct tail padding to a 16 byte boundary.

So, what gives? how *am* I supposed to indicate to the compiler it must pad structures to 16 byte boundaries?

View 8 Replies


ADVERTISEMENT

C/C++ :: How Compiler Perform Padding In Size Of Structure

Oct 9, 2013

struct st
{
    char a;
    short b;
    char c;
}

what will be size of structue.

View 3 Replies View Related

C/C++ :: Accommodate Double-size 8 Bytes In 4 Bytes Pointer In 32bit System?

Mar 15, 2015

how to accommodate double-size:8 bytes in 4 bytes pointer in 32bit system.

View 1 Replies View Related

C++ :: Encode / Decode Any Message Based On Given Secret Instructions

Jun 15, 2013

Write a program that will encode/decode any message based on the given secret instructions.

Input
The input shall be composed of 3 parts: A string, maximum length of 255 characters) in a single input line (i.e., terminated by the end-of-line or carriage return) representing the message to be encoded or decoded, A single character identifying the operation to be performed–‘E’ for encode or ‘D’ for decode, and An integer giving the number of columns to be (or that was) used for encoding called the key.

Output
The program shall display the encoded/decoded message. Since the algorithm fails if a sequence of spaces, at least as long as the key, is formed at, and subsequently deleted from, the end of the last column, replace spaces by periods in the output.

Input Validation
None.

Sample Runs

Enter the message: meet me in the park tonight at seven.
(E)ncode or (D)ecode? E
Enter number of columns (key): 5
Encoded message reads: mm.pth.neetaots.e.hrn.e.tiekiav..n..gte.

[Code] ....

View 4 Replies View Related

C++ :: Why Address Of Object Is 6 Bytes And Not 8 Bytes On 64 Bit Linux

Mar 24, 2013

Code:
int i12 = 1001;
cout << i12 << " " << &i12 << endl;

gives the result: 0x7fff0d065098

It's 6 bytes, but I'd expect the address to be 8 bytes on my 64 bit machine. I am using Ubuntu 12.04, GNU compiler.

So, why the address is 6 bytes and not 8 bytes?

View 10 Replies View Related

C++ :: Find Valence Electrons From Atomic Number

Jun 8, 2014

Finding valence electrons from atomic number in c++...

View 3 Replies View Related

C :: Implement Mutex Lock Using Atomic Hardware Instruction

Mar 25, 2014

Consider how to implement a mutex lock using an atomic hardware instruction. Assume that the following structure defining the mutex lock is available:

Code:

typedef struct {
int available;
}
lock; (available == 0)

indicates that the lock is available, and a value of 1 indicates that the lock is unavailable. Using this struct, illustrate how the following functions can be implemented using the test and set() and compare and swap() instructions:

void acquire(lock *mutex)
void release(lock *mutex)

Be sure to include any initialization that may be necessary.

View 2 Replies View Related

C++ :: Add Padding In BMP Image

Feb 1, 2015

I am working on pset4 in the CS50 online coarse. The goal is to resize a bmp image. I have it working except adding the padding back to new resized image. The image I am using uses 3 bites of padding. If the factor I resize the image by works out to have 3 bites of padding it works perfect and if the image has no padding it works perfectly I need a fresh pair of eyes. I am not sure how to add the images so here is the address to download the images and the skelton of the source code they gave to modify. [URL] .... The image that requires the padding is labled as small.bmp.

#include <stdio.h>
#include <stdlib.h>
#include "bmp.h"
int main(int argc, char* argv[]) {
// ensure proper usage
if (argc != 4)

[Code] .....

View 2 Replies View Related

C++ :: Zero Padding / Convert 2.3 To 0002.3?

Aug 12, 2013

i want a C program to convert 2.3 to 0002.3 . Any in built function is there for this conversion?

View 10 Replies View Related

C++ :: Zero Padding To A Float Number?

Aug 12, 2013

I want to convert a float number like 2.3 to 0002.3.Is therany inbuilt function in C/C++ for this.

View 4 Replies View Related

C++ :: Padding Zeroes Onto A Binary Number

Feb 24, 2014

The following piece of code is supposed to output the binary representation of a given integer and it does exactly that. However, if the given integer is 2, then output is 01. Is there a way to make the program output 0001. I am working on a C program that outputs 4-bit gray code.

#include <stdio.h>
#include <math.h>
int main(void) {
long int n=2;
while (n) {
if (n & 1)
printf("1");

[Code] ......

View 2 Replies View Related

C/C++ :: Cannot Display Items In File To Do A Receipt And Use Padding

Oct 21, 2014

#include<iostream>
#include<fstream>
#include<iomanip>
#include <sstream>
using namespace std;

string padLeft(string,char,int);
string padRight(string,char,int);
string fromMoneyToStr(double);

[Code] ....

And don't know how to use padding functions so I can space my receipt.

View 9 Replies View Related

C/C++ :: Not Able To Initialize Structure Variable Inside Main Whose Structure Defined GL

Aug 27, 2013

I am trying to run a programme implementing a function with structures in c... which is:

#include<stdio.h>
#include<conio.h>
struct store  {
        char name[20];
        float price;    
        int quantity;

[Code] .....

View 1 Replies View Related

C++ :: How To Use Structure Pointer Through A Structure Public Member Definition

Dec 7, 2014

Why doesn't this compile?

struct hi(){
void other();
}histructure;

void hi::other(){
std::cout << "Hi!" << std::endl;

[Code] ....

Makes no sense the structure is written before the structure member function is called so why is there compile errors ??...

View 3 Replies View Related

C/C++ :: Value Assignment To Structure Member Inside The Structure?

Oct 7, 2014

Is it possible to assign a value to structure member inside the structure.like.....

struct control{  
char tbi:2 =0;
char res:1 =0;
};

View 6 Replies View Related

C :: How To Create A Structure That Pointing To Another Different Structure

Mar 17, 2013

how I can create a structure that pointing to another different structure. And also passing structure to function.

View 3 Replies View Related

C :: File Operations - Fwrite Padding Extra Data In File Compare To Data Provided As Input

Oct 28, 2014

I am trying to write my files to another subfolder . Below is my program.

Code:
cat th6.c
#include <pthread.h>
#include <stdio.h>
#include <string.h>

#define SIZE 8
#define NUMELM 8

[Code] ....

I observe my filename along with directory as text in the new file created in sublfolder. This is output.

[cporgs/apue/threads]: mkdir first
[cporgs/apue/threads]: ./a.out test.txt first
test.txt -- first/test.txt
dfdfdfdfdfdfdf-14
dfdfdfdfdfdfdf-14
in thread test.txt first
[cporgs/apue/threads]: cat first/test.txt
dfdfdfdfdfdfdffirst/test.txt
[cporgs/apue/threads]: cat test.txt
dfdfdfdfdfdfdf

I could not able to get from where this filename and folder is getting added.

View 4 Replies View Related

C :: How To Split Int Into 2 Bytes

Oct 23, 2013

Im using some motors which run off PWM pins.Theres a High byte and Loq byte register (PWMH,PWML).I have an int which i need to put into these registers but i dont know how???so for example

int:84 -> PWMH=0x00 , PWML=0x54
int:310 -> PWMH=0x01 , PWML=0x36
int:11588 -> PWMH=0x2D , PWML=0x44

View 2 Replies View Related

C/C++ :: How Many Bytes / Bit In A String

Nov 2, 2012

How many bytes in a string ....

How many bit in a string ...

View 3 Replies View Related

C++ :: The Value Of 8 Bytes For Unsigned Integers

Jan 26, 2014

I'm confused about the actual value of 8 bytes for unsigned integers.

The below code suggests the value is 13217906525252912201:

#include <stdio.h>
#include <inttypes.h>
typedef uint64_t byte_int_t;
int main(void){
byte_int_t t;
printf("%" PRIu64 "
", t);
}

./runprogram
13217906525252912201

However, when I use a calculator, I get a different value: 2^64= 1.8446744e+19

So I was wondering is this really 8 bytes? So I try below test and it produces 8, as expected:

#include <stdio.h>
#include <inttypes.h>
typedef uint64_t byte_int_t;
int main(void) {
byte_int_t t;
printf("%u
", sizeof(t));
return 0;
}

So why does C and my calculator provide two different results?

View 1 Replies View Related

C++ :: Reading Bytes Without Bit Loss

Apr 13, 2013

I need to read repeatedly data from a MPEG2 file to the buffer of 188 bytes and analyse data bit by bit.

I have the problem with correct bytes reading from file. In my code listed below I have two methods for that.

First one is lossing this bytes which in hex_base mode have 0 at the begining, eg: 03, 0F, etc.

The second method based on read function which need to have buffer as a char (lenght > 1 byte). Because of that I receive different values from that from file in some cases.

How can I properly read such file?

Code:
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int main() {
fstream plik_in;

[Code] .....

View 2 Replies View Related

C++ :: Printing Out Bytes Of A File

Sep 4, 2012

I am encoding some information in a binary file, and I want to check what I am doing by printing out all the bytes that represent the file.

This is being done by opening a pointer to the file with fopen, reading in each byte of data as a char, and then writing this char to the screen.

I have some image files (e.g. "image.jpg"), whose structure I know, so that I can test my program.

When I print out the chars, they are initially correct, and follow the structure of the file as expected.

However, after about 40 bytes, I find that every subsequent character is ' ' i.e. a blank character.

I then created a CharToBin function, which allows me to print out the actual bits in the char. When doing this, it shows that all the bits are 1 for the characters. i.e. most of the file is represented by 1's, which is clearly not correct.

This happens on all the image files I have tested, and furthermore, on several other non-image files. They all start printing out ' ' after a while. However, all these files are fine and not corrupted, e.g. the image files display correctly.

Code:
#include <fstream>
#include <iostream>
#include <sstring>
#include <string>
#include <stdio.h>
using namespace std;
string CharToBin(char ch) {
bool bits[8];
for (int i = 0; i < 8; i++)

[Code] ....

View 6 Replies View Related

C++ :: Streaming Bytes Into Integer

Sep 4, 2012

I have a FILE stream, and I want to create a function that streams a specified number of bytes (up to four bytes) and returns the value of this, as an integar.

For example, supposing that my FILE has the following data, in hex: 74 C8 02 33 F2 7B....... I then want to stream three bytes and store this as an integar. So, I want to stream "04 08 02". The data stored in the integar should then be "00 74 C8 02", because I have not streamed anything into the first byte. By converting the hex to dec, the integar should then be of the value 7653378 (if it is unsigned).

To try to achieve this, I have written the following function. I create an integar and initialise it to zero, then take each byte from the stream, and OR it with my integar. Then, I shift the integar left by 8, and read the next byte, and so on.

The problem is, when I convert "c" to "c_int", it adds on a load of 1's to the left of the "c" data. This then means that the OR comparison changes all those bits in my integar to 1.

How to solve this? I am also wondering whether there is a much more simple way of doing this, rather than having to write my own function....

Code:
int StreamFileToInt(FILE *fp, int num_bytes) {
char c;
int c_int;
int x = 0x0000;
for (int i = 0; i < num_bytes; i++) {

[Code] ....

View 4 Replies View Related

C++ :: How To Convert Bytes To ASCII

Feb 7, 2014

How can I convert bytes to ASCII?, I read wikipedia about UTF-8 and I understood a little bit about add or split bytes to change the value.

Now I have those bytes

0xC7 0xE6 0xC2 0x91 0x93 0x7B 0xCE 0x01

And I found a program (DCode) that convert to 64 bits little-endian, supposedly those bytes in ASCII is this.

lun, 08 julio 2013 04:28:17 UTC <---

View 3 Replies View Related

C :: Checking How Many Bytes Are Remaining In A File?

Feb 22, 2013

while bytesremaining >=8 do something;
if bytesremaing <8 then something else .

I am new and don't know how to code for this.

View 2 Replies View Related

C :: How To Read In Nine Bytes And Check To See If There Is A Match

Feb 22, 2013

and see if the first three match a list then read in three more behind those that were left and perform a similar test on them and keep going?

View 8 Replies View Related







Copyrights 2005-15 www.BigResource.com, All rights reserved